如何在本地为每个项目安装npm模块到vendor/node_modules
并让package.json
文件看到它们。
我不想将package.json移动到供应商文件夹
我有凉亭,在.bowerrc
我指定bower_components
路径 - 这非常容易。
我怎么能用npm做到这一点?
我已经阅读了文档,npmrc文档,这里的一些问题,Google搜索,浪费了一个多小时 - 仍然没有运气。对于这么简单的任务来说,这太难了。
我不关心弊端,最后告诉我该怎么做。
答案 0 :(得分:9)
由于似乎没有内置的方法安装到任意子文件夹中的node_modules
文件夹这一事实感到沮丧,我使用以下两个脚本提出了一个偷偷摸摸的解决方案:
<强> preinstall.js 强>
var fs = require("fs");
try
{
fs.mkdirSync("./app/node_modules/");
}
catch(e)
{
}
try
{
if(process.platform.indexOf("win32") !== -1)
{
fs.symlinkSync("./app/node_modules/","./node_modules/","junction");
}
else
{
fs.symlinkSync("./app/node_modules/","./node_modules","dir");
}
}
catch(e){}
<强> postinstall.js 强>
var fs = require("fs");
try
{
if(process.platform.indexOf("win32") !== -1)
{
fs.unlinkSync("./node_modules/");
}
else
{
fs.unlinkSync("./node_modules");
}
}
catch(e){}
您需要做的就是在package.json
文件中使用它们,方法是将它们添加到scripts
选项中:
"scripts": {
"preinstall": "node preinstall.js",
"postinstall": "node postinstall.js"
},
所以,最大的问题是:它做了什么?
好吧,当您致电npm install
时,preinstall.js
脚本会触发,从而在您想要的子文件夹中创建node_modules
。然后,它会从symlink
期望真实shortcut
的{{1}}创建node_modules
或(npm
在Windows中)。
然后node_modules
安装所有依赖项。
最后,一旦安装了所有依赖项,npm
脚本将触发删除postinstall.js
!
这里有一个方便的gist,只需要你所需要的一切。
答案 1 :(得分:2)
你不能,不能使用内置的npm功能。
npm github存储库上的This discussion涵盖了该问题。它也在this answer中得到解决,这是他们常见问题解答的一部分。
您仍然可以手动执行安装&#34;将模块复制到/vendor
目录中,然后使用require("./vendor/whatever")
语法调用它们......但这意味着每个require
都需要使用新的自定义位置。有几种方法可以解决这个问题,但它们都意味着你在源代码中做了额外的工作来容纳自定义位置。