moz*_*ozg 8 node.js npm node-modules
如何在本地为每个项目安装npm模块vendor/node_modules并使package.json文件看到它们.
我不想将package.json移动到vendor文件夹
我有凉亭,在.bowerrc我指定bower_components路径 - 这是非常容易的.
我怎么能用npm做到这一点?
我已经阅读了文档,npmrc文档,这里的一些问题,Google搜索,浪费了一个多小时 - 仍然没有运气.这对于如此简单的任务来说非常困难.
我不关心弊端,最后告诉我该怎么做.
由于似乎没有内置的方法安装到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){}
Run Code Online (Sandbox Code Playgroud)
postinstall.js
var fs = require("fs");
try
{
if(process.platform.indexOf("win32") !== -1)
{
fs.unlinkSync("./node_modules/");
}
else
{
fs.unlinkSync("./node_modules");
}
}
catch(e){}
Run Code Online (Sandbox Code Playgroud)
您只需将它们package.json添加到scripts选项中即可在文件中使用它们:
"scripts": {
"preinstall": "node preinstall.js",
"postinstall": "node postinstall.js"
},
Run Code Online (Sandbox Code Playgroud)
所以,最大的问题是:它做了什么?
那么,当你调用npm install了preinstall.js它创建一个脚本触发node_modules你想要的子文件夹.然后,它会创建一个symlink或(shortcut在Windows中)node_modules是npm预计到真实node_modules.
然后npm安装所有依赖项.
最后,一旦安装了所有依赖项,postinstall.js脚本就会触发删除symlink!
这是一个方便的要点,你需要的一切.
如果不使用内置的 npm 功能,则不能。
npm github 存储库上的讨论涵盖了这个问题。这个答案也解决了这个问题,这是他们常见问题解答的一部分。
/vendor您仍然可以通过将模块复制到目录中然后使用语法调用它们来“手动”安装require("./vendor/whatever")...但这意味着每个模块都require需要使用新的自定义位置。有几种方法可以处理这个问题,但它们都意味着您需要在源中做额外的工作来适应自定义位置。
| 归档时间: |
|
| 查看次数: |
7805 次 |
| 最近记录: |