将node_modules安装到供应商

时间:2015-01-04 10:45:12

标签: node.js npm node-modules

如何在本地为每个项目安装npm模块到vendor/node_modules并让package.json文件看到它们。

我不想将package.json移动到供应商文件夹

我有凉亭,在.bowerrc我指定bower_components路径 - 这非常容易。

我怎么能用npm做到这一点?

我已经阅读了文档,npmrc文档,这里的一些问题,Google搜索,浪费了一个多小时 - 仍然没有运气。对于这么简单的任务来说,这太难了。

我不关心弊端,最后告诉我该怎么做。

2 个答案:

答案 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"
},

所以,最大的问题是:它做了什么?

  1. 好吧,当您致电npm install时,preinstall.js脚本会触发,从而在您想要的子文件夹中创建node_modules。然后,它会从symlink期望真实shortcut的{​​{1}}创建node_modules或(npm在Windows中)。

  2. 然后node_modules安装所有依赖项。

  3. 最后,一旦安装了所有依赖项,npm脚本将触发删除postinstall.js

  4. 这里有一个方便的gist,只需要你所需要的一切。

答案 1 :(得分:2)

你不能,不能使用内置的npm功能。

npm github存储库上的

This discussion涵盖了该问题。它也在this answer中得到解决,这是他们常见问题解答的一部分。

您仍然可以手动执行安装&#34;将模块复制到/vendor目录中,然后使用require("./vendor/whatever")语法调用它们......但这意味着每个require都需要使用新的自定义位置。有几种方法可以解决这个问题,但它们都意味着你在源代码中做了额外的工作来容纳自定义位置。