package.json文件的scripts指令讲解-package文件

npm相信大伙都用过,package.json文件里面有个scripts指令,比如下面这样的。

{
"scripts": {
"install": "node bin/install.js",
"uninstall": "node bin/uninstall.js"
}
}

package.json文件的scripts指令讲解

开始思考

scripts我们应该都知道,可以使用npm run xxx来帮助我们完成一些事情。从昨天的发现到今天的探索来看,scripts很有可能还充当着生命周期的角色。查阅了一下npm-scripts文档,看到的结果大吃一惊。原来我们熟知和经常使用的npm run xxx在文档中成为"另外,可以通过这种方式执行任意脚本"。下面看一下也许你不知道的npm-scripts:

scripts的属性

生命周期scripts

  • prepublish:在打包和发布包之前运行,在npm install没有任何参数的本地运行。
  • prepare:在打包和发布包之前运行,在本地npm install:没有任何参数,以及安装git依赖项时运行。这是在之后运行prepublish,但是之前prepublishOnly
  • prepublishOnly:仅在准备和打包之前运行npm publish。
  • prepack:前运行压缩包(npm pack,npm publish并安装git的依赖时)
  • postpack:在生成压缩包并移动到其最终目的地之后运行。
  • publish postpublish:发布包后运行
  • preinstall:包安装之前运行
  • install postinstall:包安装后运行。默认:node-gyp rebuild,如果binding.gyp包的根目录中有一个文件而您尚未定义自己的脚本install或preinstall脚本,npm将默认install使用node-gyp进行编译。
  • preuninstall uninstall:在包卸载之前运行。
  • postuninstall:在包卸载之后运行。
  • preversion:在碰撞包版本之前运行。
  • version:碰撞包版本之后,但提交之前运行。
  • postversion:碰撞包版本之后,提交之后运行。

主动调用

  • pretest test posttest:由npm test命令运行。
  • prestop stop poststop:由npm stop命令运行。
  • prestart start poststart:由npm start命令运行。默认:node server.js
  • prerestart restart postrestart:按npm restart命令运行。注意:npm restart 如果没有restart提供脚本,将运行停止和启动脚本。 -preshrinkwrap shrinkwrap postshrinkwrap:由npm shrinkwrap命令运行。

其他发现

神秘的.bin

你可能发现有这样一个目录node_modules/.bin,在里面有webpack vue-cli-service这些常见的文件,为什么会有呢?跟上面所说的scripts有一定关系

运行npm start来执行脚本,在npm install时,脚本会导出到node_modules/.bin目录中。

比如node_modules/.bin中存在脚本vue-cli-service

{
"scripts": {
"serve": "vue-cli-service serve --open",
}
}

package变量

比如 package.json中存在

{
"name": "test"
}
process.env.npm_package_name // 值为test

钩子脚本

git拥有钩子脚本目录为.git/hooks,npm也有钩子脚本node_modules/.hooks/{eventname}其中evenname是scripts字段中的。在这定义的hook将会运用到项目中所有的包。

小结

这篇文章主要是带大伙了解,有兴趣的小伙可以去网上深究,活到老,学到老,多学总没错。

推荐阅读