将node_modules安装到供应商
如何在每个项目的本地安装npm模块到vendor/node_modules
,并使package.json
文件看到它们。
我不想将package.json移动到供应商文件夹
我有凉亭和.bowerrc
我指定bower_components
path – 这是超级简单。
我怎么用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" },
所以,最大的问题是:它是做什么的?
-
那么,当你调用
npm install
,preinstall.js
脚本会在你想要的子文件夹中创build一个node_modules
。 然后,它会从npm
期望的node_modules
中创build一个symlink
或(Windows中的shortcut
)node_modules
。 -
然后
npm
安装所有的依赖关系。 -
最后,一旦安装了所有的依赖关系,
postinstall.js
脚本会触发这个脚本来删除symlink
!
这里有一个你需要的方便的要点 。
你不能,不使用内置的npmfunction。
关于npm github存储库的讨论涵盖了这个问题。 这也是解决这个答案 ,这是他们的常见问题解答的一部分。
您仍然可以通过将模块复制到/vendor
目录中,然后使用require("./vendor/whatever")
语法来调用它们来手动执行安装,但这意味着每个require
使用新的自定义位置。 有几种方法可以处理这个问题,但这都意味着你在源代码中做了额外的工作,以适应自定义的位置。