node.js - 将 node_modules 安装到 vendor

标签 node.js npm node-modules

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

我不想将 package.json 移动到 vendor 文件夹

我有 Bower,在 .bowerrc 中我指定了 bower_components 路径 - 这非常简单。

我如何使用 npm 做到这一点?

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

我不关心缺点,只要告诉我最后怎么做。

最佳答案

似乎没有内置方法可以安装到任意子文件夹中的 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。然后它从 npm 期望的 node_modules 到真正的 创建一个 symlink 或(Windows 中的 shortcut) >node_modules.

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

  3. 最后,一旦安装了所有依赖项,postinstall.js 脚本就会触发,它会删除 symlink!

这是一个方便的 gist有你需要的一切。

关于node.js - 将 node_modules 安装到 vendor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27764704/

相关文章:

node.js - Sinon 单元测试 'catch' 语句

javascript - 如何制作汇总模块,重新导出ESM模块的所有子模块导出?

git - npm 在没有 package.json 的情况下安装 git 存储库

node.js - 服务器和客户端的 Package.json

javascript - 如何使用 Express、AngularJS、Socket.io 进行广播并获取通知?

javascript - 如何在 http.request Node 中传递数组?

node.js - 将多个变量传递给 package.json 脚本

node.js - npm 依赖项是否需要其父包中的模块

javascript - 模块中的函数是否可以导出到另一个模块中?

typescript 。导入 "module/subdirectory"npm 包时未找到环境声明