本文同步发表于作者博客: 什么是 npm 系列:二、install 的十八般武艺
我们平时使用 npm install
只是用来安装 npm 上的包,其实它比我们想象的更强大,不仅仅是安装 npmjs
上的包,还能够从 git
、gitlab
直接安装,我们先看下 install
命令的参数列表:
// 从 npm 源安装
npm install
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range>
// 从 git 源、tar 包、本地目录安装
npm install <git-host>:<git-user>/<repo-name>
npm install <git repo url>
npm install <tarball file or url>
npm install <folder>
1. npm install
默认情况下,执行命令后会安装 package.json
中罗列的所有模块。
如果添加 --production
标记,或者环境变量 NODE_ENV
被设置为 production
,npm
就不会安装 devDependencies
中的模块。
1.1 npm install <folder>
通过 symlink
的形式,把包目录连接到项目中。
1.2 npm install <tarball file or url>
从 tar
包装有两种方式:
- file : 本地 tar 文件
npm install ./package.tgz
- url : 远程 tar 的地址
npm install https://github.com/indexzero/forever/tarball/v0.5.6
1.3 npm install <git remote url>
另一个比较常见的方式是从 git
地址安装 npm
包,不过使用的时候需要注意仓库是否太大,以及源地址是否在外国,这些都会影响安装速度。
协议地址的格式如下:
<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]
<protocol>
可以是 git
, git+ssh
, git+http
, git+https
, 或者 git+file
.
如果配置了 #<commit-ish>
或#semver:<semver>
,npm
会安装匹配到的特定提交,否则会使用 master
分支。
在使用 git
安装模块时,会涉及到访问权限的问题,我们可以使用以下的环境变量:
GIT_ASKPASS
GIT_EXEC_PATH
GIT_PROXY_COMMAND
GIT_SSH
GIT_SSH_COMMAND
GIT_SSL_CAINFO
GIT_SSL_NO_VERIFY
环境变量的具体介绍可以看此:Git 内部原理 – 环境变量
另外还有一个笨办法是使用 ssh
方式安装,本地电脑配置ssh key
,通过配置之后可以直接验证权限。
相关示例如下:
npm install 'git+ssh://git@github.com:ineo6/mini-deploy.git#v1.0.2'
npm install 'git+ssh://git@github.com:ineo6/mini-deploy#semver:^1.0'
npm install 'git+https://isaacs@github.com/ineo6/mini-deploy'
npm install 'git://github.com/ineo6/mini-deploy#v1.0.2'
GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install 'git+ssh://git@github.com:ineo6/mini-deploy.git'
1.4 npm install <githubname>/<githubrepo>[#<commit-ish>]
如果我们的代码是托管在 github
上,就可以用更简短的命令来安装:
- npm install
<githubname>/<githubrepo>[#<commit-ish>]
- npm install
github:<githubname>/<githubrepo>[#<commit-ish>]
示例如下:
npm install ineo6/magic-lint
npm install github:ineo6/magic-lint
1.5 从 github gist 安装
命令如下:
npm install gist:[<githubname>/]<gistID>[#<commit-ish>|#semver:<semver>]
把 https://gist.github.com/gistID
的内容安装为包,需要注意的是 gist
内容需要一个梯子才能访问。
示例如下:
npm install gist/1b91123bccc1bb3509bccdbe15215c83
1.6 从 bitbucket 安装
安装托管在 https://bitbucket.org/bitbucketname/bitbucketrepo
上的包。
命令如下:
npm install bitbucket:<bitbucketname>/<bitbucketrepo>[#<commit-ish>]
示例如下:
npm install bitbucket:mybitbucketuser/myproject
1.7 从 gitlab 安装
安装托管在 https://gitlab.com/gitlabname/gitlabrepo
上的包。
命令如下:
npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]
示例如下:
npm install gitlab:mygitlabuser/myproject
npm install gitlab:myusr/myproj#semver:^5.0
2. 附加参数
在使用 npm install
的时候,我们可以混合使用各类参数:
--tag
对应的是dist-tag
(实际执行中发现无效)
--dry-run
相当于模拟运行,只会输出日志,不做实际的安装。
--package-lock-only
只更新package-lock.json
,不安装依赖。
-f or --force
强制安装远端的资源
-g or --global
全局安装
--global-style
安装本地依赖时,会导致目录形式和全局安装结果一样
--ignore-scripts
忽略package.json
中的scripts
脚本
--legacy-bundling
npm 的安装方式会恢复到嵌套式安装
--link
把全局包以软连接的形式安装到本地(后续会扩展介绍)
--no-bin-links
避免创建包中的二进制执行文件的 symlinks
--no-optional
避免可选依赖被安装
--no-shrinkwrap
忽略shrinkwrap
--no-package-lock
忽略package-lock.json
--nodedir=/path/to/node/source
指定node
目录
--only={prod[uction]|dev[elopment]}
等同于NODE_ENV
,只安装非devDependencies
依赖或者devDependencies
依赖
--no-audit
禁用诊断报告
在使用上面参数的时候我们还可以附加两个参数:
- -E, –save-exact:版本号不会按照语义化记录,会显示具体的 ”1.2.3″
- -B, –save-bundle:依赖也会记录在
bundleDependencies
中
4. 预告
下一篇的名称 发布自己的 npm 包
,重点讲解发布流程以及需要注意的点,同时也有不少干货等着大家发现。
系列汇总
- 什么是 npm 系列:一、npm 简介
- 什么是 npm 系列:二、install 的十八般武艺
- to be continued