如何在每次"npm install <package>"运行后运行安装后脚本

dib*_*ndu 7 node.js npm node-modules npm-install npm-scripts

我正在维护以下目录结构:

/home/user/Desktop/
                 |-- app/
                 |      |-- package.json
                 |      `-- server.js
                 |-- node/
                 |      |-- bin/
                 |      |      |-- node
                 |      |      `-- npm
                 |      |-- include/
                 |      |-- lib/
                 |      `-- share/
                 |
                 `-- npm.sh
Run Code Online (Sandbox Code Playgroud)

我希望我所有本地安装的节点模块都驻留在目录中node.也就是说,如果我npm install在目录中运行app,最初它会将模块安装在当前目录(app)中,然后将node_modules文件夹移动到名为的外部目录node.为此,我编写了一个脚本npm.sh并将mv(move)命令放在postinstall脚本中package.json.

这些是文件npm.shpackage.json.

内容npm.sh:

#/bin/bash

export PATH=/home/user/Desktop/node/bin:$PATH
export NODE_PATH=/home/user/Desktop/node/node_modules
export NODE_MODULE_ROOT=/home/user/Desktop/node
/bin/bash
Run Code Online (Sandbox Code Playgroud)

内容app/package.json:

{
  "name": "app",
  "version": "1.0.0",
  "scripts": {
    "postinstall": "mv node_modules $NODE_MODULE_ROOT",
    "start": "node server.js"
  },
  "dependencies": {
    "jwt-simple": "^0.5.1"
  }
}
Run Code Online (Sandbox Code Playgroud)

但问题是:当我这样做时./npm.sh && cd app && npm install,一切都按预期工作.但是当我这样做时npm install jwt-simple,postinstall脚本没有被执行.

有没有办法使它适合个人npm install <package>?或者有更好的方法来实现这一目标吗?

Nik*_*nen 7

安装包后,您可以使用npm hook 脚本执行某些操作。

创建node_modules/.hooks/postinstall可执行文件,它也将在npm install <package>.

注意:我注意到 npm 版本 5.1.0 到 6.0.1 之间的 npm hook 脚本存在问题。因此,如果您遇到钩子问题,请检查您的 npm 版本并在必要时升级。