npm scripts

在一定程度是,你无论如何都要使用npm,而同时npm提供了脚本功能,所以你在命令行中使用的命令都可以在 npm Scripts 中使用。你可以通过使用npm scripts替代gulp 这篇文章来了解npm scripts(相比gulp这类工具)的好处。

你可以克隆我的demo来查看npm-scripts-demo

1. npm scripts?

npm scripts 是记录在 package.json 中的 scripts 字段中的一些自定义脚本,使用自定义脚本,用户可以将一些项目中常用的命令行记录在 package.json中,不需要每次都要敲一遍。

{

    // ...

    "scripts": {

        "build": "node build.js"

    }

}

终端运行npm run build 等同于 node build.js

小技巧

通过 npm run 来查看所有的 scripts 命令

通过 npm ls --depth 0 列出已安装的 package

通过 npm run env可以列出当前项目的所有环境变量(通过 env 可以列出系统的所有环境变量)

2. package.json配置

{

    "name": "npm-scripts-demo",

    "version": "1.0.0",

    "description": "",

    "main": "index.js",

    "scripts": {

        "presass": "echo before run sass",

        "sass": "node-sass src/style/index.scss src/dest/index.css",

        "postsass": "echo after run sass && echo $PATH",

        "remove" : "rm -rf src/dest",

        "scss": "node-sass --output-style compressed -o src/dist/css src/style",

        "lint": "eslint src/js",

        "uglify": "mkdir -p dist/js && uglifyjs src/js/*.js -m -o dist/js/app.js",

        "view": "echo $npm_package_name",

        "viewjs": "node src/js/view.js"

},

    "devDependencies": {

        "eslint": "^4.12.0",

        "node-sass": "^4.7.2",

        "uglify-js": "^3.2.0"

    },

    "author": "",

    "license": "ISC"

}

3. 工具

node-sass: 解析scss文件

eslint: 代码检查

uglify:压缩js代码

onchange:监听文件变化

4. 环境变量PATH

环境变量($PATH):决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当运行一个程序时,Linux在这些目录下进行搜寻编译链接。通过运行 echo $PATH 查看当前的搜索路径。运行npm run env可以列出所有环境变量。

npm 脚本的原理:当执行npm run,就会自动新建一个 Shell,在这个 Shell 里面执行指定的脚本命令。因此,只要是 Shell可以运行的命令,就可以写在 npm 脚本里面。

脚本执行之前它会将node_modules/.bin/加入到环境变量PATH中,所以在 npm scripts 中可以直接使用那些存在于node_modules/.bin/中的可执行文件。执行结束后,再将PATH变量恢复原样。

可以:

"sass":"node-sass src/style/index.scss src/dest/index.css",

而不用:

"test":"./node_modules/.bin/node-sass src/style/index.scss src/dest/index.css"

运行 npm run sass 来查看环境变量的变化。

5. 钩子

在 npm script 中存在两个钩子,pre和post,sass脚本命令的钩子就是presass和postsass

"presass": "echo before run sass",

"sass": "node-sass src/style/index.scss src/dest/index.css",

"postsass": "echo after run sass",

npm提供的默认钩子:

prepublish, publish, postpublish:发布模块

preinstall, install, postinstall:安装模块

preuninstall, uninstall, postuninstall:卸载模块

preversion, version, postversion:在使用npm version 修改版本号的时候执行

pretest, test, posttest:执行 npm test 的时候

prestop, stop, poststop:执行 npm stop 的时候

prestart, start, poststart:执行 npm start 的时候

prerestart, restart, postrestart:执行 npm restart 的时候

6. 变量

通过npm_package_前缀,npm 脚本可以拿到package.json里面的所有字段。比如,对于上面第2点的package.json,

// view.js

console.log(process.env.npm_package_name); //  npm-scripts-demo ,

console.log(process.env.npm_package_version); // 1.0.0

console.log(process.env.npm_package_scripts_lint); // eslint src/js

运行 npm run viewjs

参考:

为什么使用 npm Scripts 构建项目

npm scripts 使用指南

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容