npm命令及npm scripts的简单总结
npm使用方法和命令
npm config list/ls
显示配置信息
npm config list/ls -l
更详细
npm -h
显示帮助信息,建议多查看
npm -l
display full usage info ;-l is --long
npm <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文件不可以写注释,对于复杂的构建任务,代码可读性很差。这个可以尽量通过贴切的命名,任务细分来减轻。另外就是需要熟悉各构建工具的命令行使用方式。
使用npm scripts构建项目
- http://www.open-open.com/lib/view/open1487819024678.html
- http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html
使用npm scripts 和 webpack 构建项目
2个链接: