-
Notifications
You must be signed in to change notification settings - Fork 652
Description
现在 NPM 可谓是 node 的最佳包管理平台,很自然的 FIS 也放在上面。但是大家对 NPM 不甚了解,碰到一些稀奇古怪的安装问题觉着很摸不着头脑,然后把怒气直指 FIS。为了大家不动肝火,以及方便大家查阅,打算对常 NPM 常见问题在此汇总一下。
如何查看所有 NPM 的设置
npm config ls -l
全局安装了无法找到命令
大家都知道,FIS 是要求全局安装的,是因为避免由于 FIS 多版本不同项目目录下而导致编译时有差异,而导致不必要的麻烦。
有些同学可能遇到了
npm install -g fis
命令行执行 fis 说找不到这个命令。这时候一般都开始抓瞎了。
解决办法:
- 执行
npm prefix -g会输出全局安装路径 - Windows 用户把输出的路径添加到环境变量
%PATH%里面,环境变量的设置请参考 百度 - 类 Unix 用户把
$(npm prefix -g)/bin目录设置到PATH中。- 用 bash
echo -e "export PATH=$(npm prefix -g)/bin:$PATH" >> ~/.bashrc && source ~/.bashrc - 用 zsh
echo -e "export PATH=$(npm prefix -g)/bin:$PATH" >> ~/.zshrc && source ~/.zshrc
- 用 bash
全局安装了无法 require 这个包
解决办法:
设置环境变量
-
Windows
NODE_PATH=<prefix>/node_modules<prefix>执行npm prefix -g获得
-
类 Unix
export NODE_PATH=$(npm prefix -g)/lib/node_modules
安装过程中报错,checksum 失败
出现类似这样的错误
gyp ERR! stack Error: node-v0.12.7.tar.gz local checksum
a797be06553ea8e13a6ec9c3cdd8ed1b065dd1d05d2a3a0378296e70cf16d5ab not match remote
b23d64df051c9c969b0c583f802d5d71de342e53067127a5061415be7e12f39d
解决办法
清除缓存再进行安装
npm cache clean
安装过程中说没权限,sudo 也不行
一般发生在_类Unix_系统中
-
获取缓存目录
npm config get cache(~/.npm) -
删除缓存目录
sudo rm -rf ~/.npm -
再次安装坚决不要用
sudo,如果还是出现权限问题请修改安装路径权限
安装长时间不成功
NPM 平台无奈被祖国电子长城防火墙阻隔了,时不时抽风。如果遇到这种情况只有三种解决办法;
-
一次次重试
-
换个国内的源
npm install -g fis --disturl=http://registry.npm.taobao.org/mirrors/node --registry=http://registry.npm.taobao.org -
添加代理
npm config set proxy <http proxy> npm config set https-proxy <https proxy><http proxy>换成你自己的 http 代理地址<https proxy>换成你自己的 https 代理地址
注意: 如果换代理了,请更改配置,不然你又会怀疑上帝
安装报 gyp* 编译不成功
得详细说一下为啥有这种错误,其实 node 里面不是跑得是 V8 么,那么其第三方扩展机制也全盘拿了过来。这块说的第三方扩展是指 addon 插件,也就是所谓的 native 插件。请不要被这个词语吓着了,说白了就是写一个二进制插件,用 c++ 写的。
所以这类插件需要编译器(gcc,clang,vs)编译,安装这类插件的时候如果你系统没有装 VS 或者是 gcc 什么的编译器就会报错。
而且这类插件在各个版本的 node 下兼容性不好,所以报编译语法错误也是很正常的。遇到此类错误只有两种解决办法;
- 自己搞懂机制自己编译插件
- 到作者 GitHub 上求助
想本地安装而非全局安装,运行 FIS 怎么搞
由于种种维护上的原因,FIS 必须要全局安装包括其插件,有些人就受不了这个,觉着是反模式,咋眼一看确实是,但长远来看安装全局同一版本才是王道,有过 node 工程实践的同学对此估计深有体会。
但不巧,上线编译的时候用的编译机不是自己的机器,而无法部署 FIS 编译环境啊。这时候怎么办呢?
首先,我们得了解一下 NPM 安装的时候的一些处理。不才,直接贴 NPM 的文档。
DIRECTORIES
See npm help 5 npm-folders to learn about where npm puts stuff.
In particular, npm has two modes of operation:
- global mode:
npm installs packages into the install prefix at prefix/lib/node_modules and bins are installed in prefix/bin.
- local mode:
npm installs packages into the current project directory, which defaults to the current working directory. Packages are
installed to ./node_modules, and bins are installed to ./node_modules/.bin.
Local mode is the default. Use --global or -g on any command to operate in global mode instead.
看到 local mode 的解释了吧。当 local mode 安装的时候,会把 bin 链接到 ./node_modules/.bin 目录下。
那么当本地安装 FIS
npm install fis
执行
./node_modules/.bin/fis -v
来调用 FIS 进行操作。
假设你想进行更方便的操作,设置两个环境变量即可。
PATH执行命令靠它NODE_PATHnoderequire靠它
然后就没有然后了,你可以肆意蹂躏了。