我可以从全局安装的软件包访问本地安装的软件包吗?

我不知道我是否正确地提出了这个问题,所以如果从标题中不清楚我的意思,我很抱歉。

假设我有一个安装可执行文件的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