将node_modules安装到供应商

kfgdxczn  于 2023-05-28  发布在  Node.js
关注(0)|答案(3)|浏览(157)

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

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

我有bower,在.bowerrc中我指定了bower_components路径--这非常简单。
如何使用npm实现这一点?
我已经阅读了文档,npmrc文档,这里的一些问题,谷歌,浪费了一个多小时-仍然没有运气。对于这样一个简单的任务来说,这是荒谬的困难。
我不在乎缺点,只要告诉我最后该怎么做就行了。

bttbmeg0

bttbmeg01#

由于似乎没有内置的方法可以安装到任意子文件夹中的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 install时,preinstall.js脚本会被触发,它会在你想要的子文件夹中创建一个node_modules。然后,它从npm期望的node_modules到真实的的node_modules创建symlink或(Windows中的shortcut)。
1.然后npm安装所有依赖项。
1.最后,安装完所有依赖项后,postinstall.js脚本将被触发,删除symlink
这里有一个方便的gist与所有您需要的。

xvw2m8pv

xvw2m8pv2#

不可以,因为没有使用内置的npm功能。

npm github仓库上的This discussion解决了这个问题。这也是在这个答案中解决的,这是他们常见问题的一部分。
您仍然可以通过将模块复制到/vendor目录中,然后使用require("./vendor/whatever")语法调用它们来“手动”安装......但这意味着每个require都需要使用您的新自定义位置。有几种方法可以处理这个问题,但它们都意味着您要在源代码中做额外的工作来适应自定义位置。

pqwbnv8z

pqwbnv8z3#

您可以生成.tgz文件的库,你想供应。

git clone git@github.com/foo/library.git
cd library
npm install && npm run build
npm pack <build-dir>

然后将.tgz文件复制到项目中并安装它。

cp library-1-0-0.tgz /path/to/your/project/vendor/
cd /path/to/your/project
npm install ./vendor/library-1-0-0.tgz
{
    "name": "your-project",
    "dependencies": {
        "library": "file:vendor/library-1-0-0.tgz"
    } 
}

如果您的库是公共更新package.json,请参阅文档。

"bundledDependencies": [
    "library"
]

相关问题