工作在一台不能连外网的电脑上,为了能够使用 npm install, 因此使用 verdaccio 搭建内网的npm 服务器
Verdaccio 官网: verdaccio.org/docs/en/ins…
首先准备两台电脑,一台能连外网,一台不能连外网
在能连外网的电脑上安装 verdaccio,官网推荐的是
npm install -g verdaccio 全局安装,经测试,使用局部安装也可用
首先启动 verdaccio
步骤:
1. 在磁盘下新建verdaccio目录, 并在目录下运行cmd命令,或执行cmd命令到当前目录。 例: cd D:\verdaccio。
2. 执行 npm init 命令
3. 执行命令 npm install verdaccio --save
4. 执行命令 node_modules\\.bin\\verdaccio 即可启动 verdaccio,此时命令行会打印出对应的 config 文件路径,例如:C:\Users\用户名\AppData\Roaming\verdaccio\config.yaml
5. 默认的配置放到C盘中了,可以放到当前工作目录下,方便控制,将默认的config文件拷贝到当前目录下,并在package.json 中的scripts中添加字段
"start": "node_modules\\.bin\\verdaccio --config ./config.yaml"
6. 将之前启动的命令停掉,重新执行 npm start 即可,至此verdaccio已启动完成, 默认是 <http://localhost:4873/>
然后安装依赖包
在一个还未安装依赖包的项目中添加一个 .npmrc 文件,里面内容为
registry=http://localhost:4873
然后执行 npm install命令,即可在verdaccio目录中的storage目录下缓存对应的包
内网搭建
将verdaccio 目录整个拷贝到内网电脑上,然后执行 npm start 即可
在其它项目中添加 .npmrc 文件添加registry=http://your ip:4873
即可执行 npm install
注意事项:
以上步骤是理想情况下可以正常使用,但现实总是很残酷
内网执行npm install 后可能会发现有些包提示找不到,有几个原因:
1. 外网 npm 有缓存,因此在外网执行install命令前先执行 npm cache verify 清除缓存,或者使用 npm cache clean --force 强行将缓存全部清除
2. 有些模块在外网机器上全局安装过以后,好像就不会在 storage 中再次缓存,我目前的做法是将外网全局安装的包全部卸载掉
npm list -g --depth 0 查看全局安装的包
3. 外网 install 免科学上网,可以在 config.yaml 文件中修改 uplinks下的 npmjs 的 url 值为 https://registry.npm.taobao.org
4. Verdaccio 默认是 localhost ,要使用 ip 给其它电脑访问,可在 config.yaml 文件中添加一行 listen: 0.0.0.0:4873
5. 内网 npm install 时老是提示找不到 npm 这个 package,不知道是为什么,暂时解决方案是在外网机器上的项目目录下执行 npm install --save-dev npm@6.9.0 指定的版本号是和当前 npm 的版本完全一致的,执行后会在 storage 中缓存 npm 包
6. 项目中有依赖 node-sass 包时,还需要另外处理,外网安装 node-sass 会在 C:\Users\用户名\AppData\Roaming\npm-cache 目录下新建一个 node-sass 缓存目录,拷贝 verdaccio 到内网后安装就会失败,查看 log 是下载 node 文件失败
解决方案是将外网的 node-sass 缓存目录拷贝到内网某个空目录,将该目录部署到 iis 服务器, 这里部署为 [http://你的ip/node-sass/](http://localhost:4873/) ,并将 node-sass 目录里面的 4.13.1 文件夹重命名为 v4.13.1 , 修改内网项目目录的 .npmrc
添加一行 sass_binary_site=http://你的ip/node-sass/
至此,应该就完成了内网的npm 服务器搭建了