Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何要求全局CLI的节点子模块?_Javascript_Node.js_Command Line Interface_Require - Fatal编程技术网

Javascript 如何要求全局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

我有一个基于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/three.js');
var variable4 = require(appRoot + '/lib/four.js');
这通常在开发过程中,当I
npm-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'));
    
    而且它有效!,但这仍然让我感到畏缩,因为
    :(