原文地址

描述

script是package.json文件的一个属性,支持许多内置命令、预设生命周期事件以及自定义脚本命令。它们都可以被npm run-script 或者npm run 来执行,与此同时,带有pre和post前缀的相应命令也将被执行(在对应的时机)。(比如: premyscript,myscript,postmyscript)。依赖包中的脚本可以通过npm explore — npm run 来执行。

Pre & Post 命令

要为package.json中script模块中的命令创建pre和post命令只需创建其他匹配name增加pre或者post前缀即可

  1. {
  2. "scripts": {
  3. "precompress": "{{ executes BEFORE the `compress` script }}",
  4. "compress": "{{ run command to compress files }}",
  5. "postcompress": "{{ executes AFTER `compress` script }}"
  6. }
  7. }

生命周期命令

这是一些特殊的生命周期脚本,除了在对应pre和post的时机,在某些特定情况下也会执行。

  1. prepare, prepublish, prepublishOnly, prepack, postpack
  • prepare (since npm@4.0.0)
    • 在pack之前执行
    • 在publish之前执行
    • 不带参数的npm install时执行
    • 在prepublish之后,prepublishOnly之前执行
    • 提示:如果一个包通过git下载,包含prepare命令,在打包和下载之前它的dependencies和devDependencies将被下载,它的prepare命令将执行
  • prepublish (DEPRECATED)
    • 和prepare一样
  • prepublishOnly
    • 仅在npm publish的时候执行,时机在prepare之前pack之后
  • prepack
    • 在npm pack、npm publish和下载一个git作为依赖的依赖包
    • 提示:npm run pack和npm pack是不一样的。npm run pack是执行用户定义的指令名称,npm pack是cli定义的命令。
  • postpack

    • 在tarball被生成移除之后执行

      操作命令对应生命周期

  • npm publish

    • prepublishOnly
    • prepare
    • prepublish
    • publish
    • postpublish
  • npm pack
    • prepack
    • postpack
  • npm install
    • preinstall
    • install
    • postinstall
  • Also triggers
    • prepublish (when on local)
    • prepare (when on local)
  • npm start
    • prestart
    • start
    • poststart

      默认值

      npm将定义依稀命令的默认值基于大概要项目
      “start”: “node server.js”:
      如果项目根目录中有server.js文件,那么npm将默认执行命令node server.js。
      “install”: “node-gyp rebuild”:
      如果项目根目录中有binding.gyp文件,并且没有定义你自己install或者preinstall命令,npm将通过node-gyp编译设置默认install命令