我可以从全局安装的软件包访问本地安装的软件包吗?
我不知道我是否正确地提出了这个问题,所以如果从标题中不清楚我的意思,我很抱歉。
假设我有一个安装可执行文件的NPM软件包。 据推测,我希望用户使用-g
标志来安装这个软件包,以便他们可以随时运行它。
在这种情况下,当我从可执行文件中调用require()
,它将查找全局安装的包。
但是假设这个包为Node项目提供了通用的function。 我可能想知道当前项目在本地安装了哪些包。 我应该假设:
path.join(process.cwd(), 'node_modules')
或者在这种情况下是否有更正确的方法来设置NODE_PATH? (或者,而不是设置NODE_PATH,我应该只require(absolute_path_to_file)
?)
require
不仅要查找$(CWD)\node_modules
内部的包,还要node_modules
父,祖父母等所有node_modules
内部的数据。因此,您可以使用npm上的resolve
来解决这个问题
FILE:your_global_command.js
// npm install resolve var resolve = require('resolve').sync; // Lookup for local module at current working dir function require_cwd(name) { var absolute_path = resolve(name, { basedir: process.cwd() }); return require(absolute_path); } // Load local express // this will throw an error when express is not found as local module var express = require_cwd('express');
我还创build了一个包,以在current-working-dir(而不是模块的__dirname
)处要求包: https : __dirname