npm 常用配置
npm config list/ls
显示配置信息npm config list/ls -l
更详细npm -h
显示帮助信息,建议多查看npm -l
display full usage info ;-l is --longnpm <cmd> -h
显示某个命令的帮助信息npm help npm
npm help <term>
npm config set prefix path
修改npm全局安装目录npm config set cache path
修改npm cache目录
把新的npm路径修改到系统环境变量中,才可生效npm config set registry='https://registry.npm.taobao.org/'
设置npm资源镜像,加快下载安装速度,还有其他镜像
npm ls
显示工程目录下本地安装的包,--depth=0,显示初级依赖层次npm -g ls
显示全局安装的包npm i/install --save xxx
安装包信息将加入到dependencies(生产阶段的依赖)npm i/install --save-dev xxx
安装包信息将加入到devDependencies(开发阶段的依赖),所以开发阶段一般使用它npm i --save-exact xxx
精确安装包版本,package.json里的依赖包的value是具体的版本号,前边没有符号npm root
查看包的安装路径,及node_modules的路径npm view modulename
查看模块的package.json信息npm view moudleName dependencies
查看包的依赖关系npm view moduleName repository.url
查看包的源文件地址npm view moduleName engines
查看包所依赖的node版本npm outdated
检测显示过时的包npm update
更新包npm uninstall
卸载包npm init
在项目中引导创建一个package.json文件
缩写选项:
Shorthands and Other CLI Niceties
The following shorthands are parsed on the command-line:
-v: --version
-h, -?, --help, -H: --usage
-s, --silent: --loglevel silent
-q, --quiet: --loglevel warn
-d: --loglevel info
-dd, --verbose: --loglevel verbose
-ddd: --loglevel silly
-g: --global
-C: --prefix
-l: --long
-m: --message
-p, --porcelain: --parseable
-reg: --registry
-f: --force
-desc: --description
-S: --save
-D: --save-dev
-O: --save-optional
-B: --save-bundle
-E: --save-exact
-y: --yes
-n: --yes false
ll and la commands: ls --long
npm scripts
参考多个网络资源:
- http://www.xiaocaoge.com/build-with-npm-scripts.html?utm_source=tuicool&utm_medium=referral
- http://www.open-open.com/lib/view/open1487819024678.html
- http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html
npm scripts 是指npm对于package.json文件中"scripts"属性的处理,通过该属性,npm 可以执行命令。
使用不带参数的npm run
,显示package.json里所有的script脚本命令及内容。
npm run
会创建一个新的shell,执行指定的命令,并将node_modules/.bin 加入 PATH 变量。当脚本内容结束,则子 shell 关闭,回到父 shell 中。
由于 npm 脚本的唯一要求就是可以在 Shell 执行,因此它不一定是 Node 脚本,任何可执行文件都可以写在里面。
npm 脚本的退出码,也遵守 Shell 脚本规则。如果退出码不是0,npm 就认为这个脚本执行失败。
向npm run xx传入参数必须用--
表明
执行顺序:$npm run xx & npm run xxx
同时并行执行$npm run xx && npm run xxx
前一个执行成功,再执行最后一个
例如:
{
"scripts": {
"lint": "eslint"
}
}
目录终端中,执行npm run-script lint
启动lint命令,也可简化为npm run lint
;实际是执行了node_modules/.bin/eslint。
项目目录下的node_modules/.bin/目录专门存放安装包的可执行程序。
内置的几个npm 命令
- start: 执行 npm start
- test: 执行 npm test
- stop: 执行 npm stop
- restart: 执行 npm restart。npm restart是一个复合命令,实际上会依次执行三个脚本命令:stop、restart、start。prerestart>prestop>stop>poststop>restart>prestart>start>poststart>postrestart
pre 和 post hooks
双重的pre和post无效,比如prepretest和postposttest是无效的。
{
"scripts":{
'prexxx':,
'xxx':,
'postxxx':,
}
}
执行npm run xxx
后,默认执行顺序:npm run prexxx > npm run xxx > npm run postxxx
一些内置的命令如:start ,执行npm start,会默认执行: npm run prestart > npm run start > npm run poststart。详见官网
{
"scripts":{
"build:dev":"xxxx",//npm run build:dev
"build:prod":"xxx"//npm run build:prod
}
}
环境变量
通过npm_package_前缀,npm 脚本可以拿到package.json里面的字段
若package.json中有{"version":xxx,"name":xx},则npm 在scripts中添加环境变量: npm_package_name 和 npm_package_version。
在*.js文件中可以使用process.env.npm_package_xxx
引入
还可自定义变量:
config 字段也可以用于设置内部字段
{
"config": {
"port": 1111
}
//则scripts中可以引入
"scripts":{//bash脚本
"xxx":"xxx ${npm_package_config_port}/$npm_package_config_port"
}
}
npm_lifecycle_event
npm 正在执行哪个script,npm_lifecycle_event就返回当前正在运行的脚本名称。
为什么使用 npm Scripts 构建项目
参考链接,这里摘抄几点:
Gulp 与 Grunt 的不足
总得来说就是 Gulp 与 Grunt 引入了一层复杂但是多余的抽象层,用来抽象直接的构建命令,比如gulp-uglify和grunt-contrib-uglify用来包装uglifyjs命令。这层抽象所建立的插件生态带来了很多问题:
额外的抽象,带来了额外的学习成本;
插件依赖作者,无论是插件质量、设计合理性、文档、更新及时性等严重依赖作者自身的水平与投入;
为什么 npm scripts 先前使用的人不多?这可能是因为很多人存在对 npm scripts 的误解:
人们认为 npm scripts 需要熟悉命令行技能;
人们认为 npm scripts 不够强大;
人们认为 Gulp 的流(stream)对于快速构建是必须的;
人们认为 npm scripts 不能跨平台;
而真相是:
npm scripts 并不需要熟悉命令行技能,当然熟悉的话更好;
npm scripts 可以完成绝大多数 Grunt 与 Gulp 完成的任务,实在不行还可以写 NodeJS 代码来完成;
因为 npm scripts 在一个 Shell 环境中执行的,而 Shell 天生支持流;
几个常见的命令操作符&&/</>/|是跨平台的,对于一些 Linux/Mac 中的 Shell 命令可以使用 shelljs 来实现跨平台;
而 npm scripts 的不足是由于package.json文件不可以写注释,对于复杂的构建任务,代码可读性很差。这个可以尽量通过贴切的命名,任务细分来减轻。另外就是需要熟悉各构建工具的命令行使用方式。