簡體   English   中英

將node_modules安裝到供應商

[英]Install node_modules to vendor

如何在本地為每個項目安裝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){}

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腳本將觸發,這會在你想要的子文件夾中創建一個node_modules 然后它從npm期望的node_modules創建一個symlink或(Windows中的shortcut )到真實的node_modules

  2. 然后npm安裝所有依賴項。

  3. 最后,一旦安裝了所有依賴項,就會觸發postinstall.js腳本,刪除symlink

這是一個方便的要點 ,你需要的一切。

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

關於npm github存儲庫的討論涵蓋了該問題。 這個問題也在他們的常見問題解答中得到解決。

您仍然可以通過將模塊復制到/vendor目錄中然后使用require("./vendor/whatever")語法調用它們來“手動”進行安裝......但這意味着每個require使用新的自定義位置。 有幾種方法可以解決這個問題,但它們都意味着您在源中做了額外的工作來容納自定義位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM