我正在维护以下目录结构:
/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.json
和npm.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
?或者有更好的方法来实现这一目标吗?
答案 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。不知道是否有解决办法,但我也一直在寻找。