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

参考多个网络资源:

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文件不可以写注释,对于复杂的构建任务,代码可读性很差。这个可以尽量通过贴切的命名,任务细分来减轻。另外就是需要熟悉各构建工具的命令行使用方式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

2017年企业版高薪运维经典基础面试题汇总

1.解释下什么是GPL,GNU,自由软件? GPL:(通用公共许可证):一种授权,任何人有权取得、修改、重新发布自由软件的权力。 GNU:(革奴计划):目标是创...

4206
来自专栏JMCui

Linux 学习记录 二 (文件的打包压缩).

 前言:本文参考《鸟哥的Linux 私房菜》,如有说的不对的地方,还请指正!谢谢!  环境:Centos 6.4  和window不同,在Linux压缩文件需要...

3605
来自专栏北京马哥教育

如何判断目标站点是否为Django开发

老文一篇,几个月以前发在【代码审计】小密圈里的文章,当时是写一个系列(Django安全漫谈),抽出其中的一部分,分享一下。 在黑盒测试的情况下,如何判断一个站是...

3228
来自专栏北京马哥教育

linux目录太长怎么办?分享一点小技巧

linux目录太长怎么办?分享一点小技巧 在linux使用cd的时候,可能会遇到目录比较深的时候,这个时候总是cd一个很长的目录会很麻烦,那有没有什么比较方便...

3297
来自专栏我和PYTHON有个约会

爬虫 0030~ requests利刃出鞘

requests第三方封装的模块,通过简化请求和响应数据的处理,简化繁琐的开发步骤和处理逻辑、统一不同请求的编码风格以及高效的数据处理特性等而风靡于爬虫市场。

951
来自专栏python学习指南

python爬虫(四)_urllib2库的基本使用

本篇我们将开始学习如何进行网页抓取,更多内容请参考:python学习指南 urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络...

20910
来自专栏jeremy的技术点滴

现代Web开发教程系列_02

2997
来自专栏北京马哥教育

Linux基础急速入门:用 TCPDUMP 抓包

简介 网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。 tcpdump - dum...

3668
来自专栏coding for love

进程与线程,单核与多核1. 简介2. 程序3. 进程4. 线程5. 多进程与多线程的选择6. 小结参考

用户打开浏览器,其实就是打开了浏览器应用程序。那么什么是程序呢?我们常说浏览器是多线程的,JS 是单线程的,那么什么是线程呢?说到线程,和我们常说的进程有什么关...

3003
来自专栏WindCoder

《Linux内核分析》之触发一个系统调用实验总结

系统调用列表中可用的很多,可惜对用代码进行系统调用不太清楚,只好从网上窃取了一份,地址在最后放上。此处以fork()为例。

1093

扫码关注云+社区

领取腾讯云代金券