分类 Windows 下的文章

由于 node.js 在 Windows 下会有各种问题,最好的开发环境还是 Linux,所以我通过 VMware 内安装 Ubuntu 虚拟机的方式学习 node.js。

我的流程是:

  • VMware 安装 Ubuntu
  • 共享 Windows 下的文件夹给 Ubuntu 作为开发目录
  • Windows 下使用 vs code 通过 ssh 方式远程连接 Ubuntu

通过远程连接的方式在 Windows 下做 node.js 开发实际体验很好。但是在通过 npm 安装某些包时常常会有报错出现,错误日志大概意思就是说无法给 node_modules 文件夹内安装的库文件添加软连接到系统路径。

网上查询后发现了问题原因,我的开发目录实际是在 Windows 下的,Windows 和 Linux 有着不一样的文件系统和路径格式,所以 npm 在安装某些包含 bin 可执行文件的第三方库时,会默认自动创建相关文件的软链接到 Linux 系统路径,这样就就报错了。

如果要坚持使用共享目录的形式做开发,那么需要设置在 npm 安装新库时使用参数 --no-bin-links 告诉系统不要自动创建软连接,语法如下:

npm install cowsay --no-bin-links

这样就会跳过相关步骤。

也可以设置到 npm 配置中,这样以后安装的包都会默认不创建 bin 的软连接了:

npm config set bin-links false

当然最理想的方式就是将开发路径放置在 Linux 系统中,而不是通过共享目录的形式。这样就是一个纯原生的环境。

参考链接:https://github.com/npm/npm/issues/2221

最近研究了下 Windows 的共享设置,目的是在同一局域网下共享文件夹给其他设备读写。下面从原理和实际操作上介绍下共享过程。

SMB

Windows 共享使用 Server Message Block (SMB) 协议,它可以让应用程序访问本机网络下的其他设备的文件及服务。

SMB 是 IBM 在 1980 年代创造的协议,目前已经有了很多的升级及分支。

SMB 协议允许应用程序访问远程主机的文件和资源如打印机等,也可以同远程主机上设置了接收 SMB 协议的应用程序通信。它运行在网络的 layer 7 层,也就是 application 应用层,使用 TCP/IP 的 445 端口传输数据。

从 Windows 95 开始,微软将引入了 SMB 协议的支持。Linux 端,samba 作为一个开源软件提供 SMB 的支持。

- 阅读剩余部分 -

Microsoft store 里都是 UWP 应用,运行在被称为 App Container 的虚拟沙箱环境中,其安全性及纯净度远胜于传统的 EXE 应用。但 App Container 机制同时也阻止了网络流量发送到本机(即 loopback), 使大部分网络抓包调试工具无法对 UWP 应用进行流量分析。该机制也阻止了 UWP 应用访问 localhost,如果你的代理地址在本地地址,UWP 就无法访问。

有两种方法来解除某个 UWP 应用的沙盒隔离,一种是使用系统自带的工具 CheckNetIsolation,一种是使用第三方工具 fiddler

CheckNetIsolation

Windows 10 自带了一个 CheckNetIsolation 工具,可以解除 UWP 应用的网络隔离,使之可以正常访问本地地址在终端执行以下指令即可:

CheckNetIsolation.exe loopbackexempt -a -p=SID

SID(security identifier) 是每个 UWP 应用独有的识别码,可以从注册表中获得应用的 SID 码。

- 阅读剩余部分 -

今天安装了 Ubuntu 虚拟机用来做 node.js 开发,在选择网络模式时我选择了 NAT 模式,因为这样可以在主机处于不同网络环境下使虚拟机都有着同一个 IP 地址,方便管理。

但是在此时中发现,虚拟机可以正常访问主机及外网,但是主机无法通过分配的 NAT 地址来 ssh 访问虚拟机。查询后发现这是正常现象。可以通过设置端口转发来将虚拟机端口映射到主机端口来实现对虚拟机的访问。

- 阅读剩余部分 -