将node_modules安装到供应商

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

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

我有凉亭和.bowerrc我指定bower_componentspath – 这是超级简单。

我怎么用npm来做这个?

我读过文档,npmrc文档,这里有一些问题,用googlesearch,浪费了一个多小时 – 仍然没有运气。 这对于这样一个简单的任务来说是非常困难的。

我不在乎弊端,只是告诉我怎么做最后。

由于似乎没有内置的方法将其安装到任意子文件夹中的node_modules文件夹中,我感到沮丧, node_modules我想出了一个使用以下两个脚本的鬼祟解决scheme:

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){} 

所有你需要做的就是通过将它们添加到scripts选项来在package.json文件中使用它们:

 "scripts": { "preinstall": "node preinstall.js", "postinstall": "node postinstall.js" }, 

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

  1. 那么,当你调用npm installpreinstall.js脚本会在你想要的子文件夹中创build一个node_modules 。 然后,它会从npm期望的node_modules中创build一个symlink或(Windows中的shortcutnode_modules

  2. 然后npm安装所有的依赖关系。

  3. 最后,一旦安装了所有的依赖关系, postinstall.js脚本会触发这个脚本来删除symlink

这里有一个你需要的方便的要点 。

你不能,不使用内置的npmfunction。

关于npm github存储库的讨论涵盖了这个问题。 这也是解决这个答案 ,这是他们的常见问题解答的一部分。

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