如何将每个项目的npm模块本地安装到vendor/node_modules并使package.json文件看到它们。
vendor/node_modules
package.json
我不想将package.json移动到vendor文件夹
我有bower,在.bowerrc中我指定了bower_components路径--这非常简单。如何使用npm实现这一点?我已经阅读了文档,npmrc文档,这里的一些问题,谷歌,浪费了一个多小时-仍然没有运气。对于这样一个简单的任务来说,这是荒谬的困难。我不在乎缺点,只要告诉我最后该怎么做就行了。
.bowerrc
bower_components
bttbmeg01#
由于似乎没有内置的方法可以安装到任意子文件夹中的node_modules文件夹中,我使用以下两个脚本想出了一个巧妙的解决方案:
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
"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与所有您需要的。
npm install
npm
symlink
shortcut
xvw2m8pv2#
不可以,因为没有使用内置的npm功能。
npm github仓库上的This discussion解决了这个问题。这也是在这个答案中解决的,这是他们常见问题的一部分。您仍然可以通过将模块复制到/vendor目录中,然后使用require("./vendor/whatever")语法调用它们来“手动”安装......但这意味着每个require都需要使用您的新自定义位置。有几种方法可以处理这个问题,但它们都意味着您要在源代码中做额外的工作来适应自定义位置。
/vendor
require("./vendor/whatever")
require
pqwbnv8z3#
您可以生成.tgz文件的库,你想供应。
.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" ]
3条答案
按热度按时间bttbmeg01#
由于似乎没有内置的方法可以安装到任意子文件夹中的
node_modules
文件夹中,我使用以下两个脚本想出了一个巧妙的解决方案:preinstall.js
postinstall.js
您只需将它们添加到
scripts
选项中,即可在package.json
文件中使用它们:所以,最大的问题是:它有什么作用?
1.当你调用
npm install
时,preinstall.js
脚本会被触发,它会在你想要的子文件夹中创建一个node_modules
。然后,它从npm
期望的node_modules
到真实的的node_modules
创建symlink
或(Windows中的shortcut
)。1.然后
npm
安装所有依赖项。1.最后,安装完所有依赖项后,
postinstall.js
脚本将被触发,删除symlink
!这里有一个方便的gist与所有您需要的。
xvw2m8pv2#
不可以,因为没有使用内置的npm功能。
npm github仓库上的This discussion解决了这个问题。这也是在这个答案中解决的,这是他们常见问题的一部分。
您仍然可以通过将模块复制到
/vendor
目录中,然后使用require("./vendor/whatever")
语法调用它们来“手动”安装......但这意味着每个require
都需要使用您的新自定义位置。有几种方法可以处理这个问题,但它们都意味着您要在源代码中做额外的工作来适应自定义位置。pqwbnv8z3#
您可以生成
.tgz
文件的库,你想供应。然后将
.tgz
文件复制到项目中并安装它。如果您的库是公共更新
package.json
,请参阅文档。