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

时间:2017-06-05 05:49:51

标签: node.js npm npm-install node-modules npm-scripts

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

/home/user/Desktop/
                 |-- app/
                 |      |-- package.json
                 |      `-- server.js
                 |-- node/
                 |      |-- bin/
                 |      |      |-- node
                 |      |      `-- npm
                 |      |-- include/
                 |      |-- lib/
                 |      `-- share/
                 |
                 `-- npm.sh

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

这些是文件package.jsonnpm.sh

package.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 的内容:

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" } } 时,一切都按预期工作。但是当我执行./npm.sh && cd app && npm install时,npm install jwt-simple脚本没有被执行。

有没有办法让它适用于个人postinstall?或者有更好的方法来实现这一目标吗?

2 个答案:

答案 0 :(得分:0)

安装软件包后,您可以使用npm hook scripts进行操作。

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

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

答案 1 :(得分:0)

对于在这里绊脚的其他人,在安装特定软件包时,npm不会在package.json中运行pre / postinstall。您可以在这里查看参考文献https://npm.community/t/preinstall-npm-hook-doesnt-execute-when-installing-a-specific-package/2505。不知道是否有解决办法,但我也一直在寻找。