Javascript 如何要求全局CLI的节点子模块?
我有一个基于nodejs的全局CLI,Javascript 如何要求全局CLI的节点子模块?,javascript,node.js,command-line-interface,require,Javascript,Node.js,Command Line Interface,Require,我有一个基于nodejs的全局CLI,需要它自身的一些子模块,如下所示: var appRoot = require('app-root-path'); var path = require('path'); var variable1 = require(appRoot + '/lib/one.js'); var variable2 = require(appRoot + '/lib/two.js'); var variable3 = require(appRoot + '/lib/thre
需要它自身的一些子模块,如下所示:
var appRoot = require('app-root-path');
var path = require('path');
var variable1 = require(appRoot + '/lib/one.js');
var variable2 = require(appRoot + '/lib/two.js');
var variable3 = require(appRoot + '/lib/three.js');
var variable4 = require(appRoot + '/lib/four.js');
这通常在开发过程中,当Inpm-link
来自CLI项目的根目录时有效,但当包为npm-install-g
时失败;无法从节点_模块的本地安装中找到LIB。另外,请注意此处的“/”以访问路径/到/库
,这不太可能在Windows上工作
由于我的用户将在其计算机(任何操作系统)的任何目录中的项目上使用CLI,因此我希望使用操作系统无关性来要求CLI中的子模块
因此,我尝试了以下方法:
符号链接:
“脚本”:{
...
“安装后”:“npm链接--本地”
}
这在我的Mac电脑上还不起作用,但我也在某个地方读到符号链接在Windows上并不总是起作用。否则这将是最干净的实现。自动取款机我不知道还有什么能让它在Windows上工作
尝试使用节点应用根路径模块获取节点_模块/CLITool中libs的绝对路径,如下所示:
这就是我要坚持的代码:
var variable1 = require(path.join(path.dirname(require.main.filename), 'lib', 'one.js'));
var variable2 = require(path.join(path.dirname(require.main.filename), 'lib', 'two.js'));
var variable3 = require(path.join(path.dirname(require.main.filename), 'lib', 'three.js'));
var variable4 = require(path.join(path.dirname(require.main.filename), 'lib', 'four.js'));
这不起作用,导致以下错误:
Error: Cannot find module '/usr/local/lib/node_modules/CLItool/bin/lib/one.js'
错误:找不到模块“/usr/local/lib/node_modules/CLITool/bin/lib/manager.js”
专家们有没有关于如何做到这一点的线索
我确实在的文档中发现了一些关于这方面的内容,但无论我做什么,它都会给我带来以下错误:
Error: Cannot find module '/usr/local/lib/node_modules/CLItool/bin/lib/one.js'
问题在于它返回的路径末尾的bin
编辑-1:好的。我可以使用\uu dirname
和'.'
提取libs,如下所示:
var variable1 = require(path.join( __dirname, '..', 'lib', 'one.js'));
而且它有效!,但这仍然让我感到畏缩,因为。
:(