我不知道我是否正确地提出了这个问题,所以如果从标题中不清楚我的意思,我会道歉。
假设我有一个安装可执行文件的NPM软件包。据推测,我希望用户使用-g
标志安装此软件包,以便他们可以在任何时候运行它。
在这种情况下,当我从可执行文件中调用require()
时,它将查找全局安装的软件包。
但是假设这个包为Node项目提供了通用功能。我可能想知道当前项目已安装本地的软件包。我应该假设:
path.join(process.cwd(), 'node_modules')
或者在这种情况下是否有更“正确”的方法来设置NODE_PATH? (或者不是设置NODE_PATH,我应该require(absolute_path_to_file)
吗?)
答案 0 :(得分:1)
require
不仅会查找$(CWD)\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');
我还创建了一个包,要求在current-working-dir(而不是模块的__dirname
)中使用一个包:
https://npmjs.org/package/require-cwd