Javascript 从可执行文件打开npm模块中的文件

Javascript 从可执行文件打开npm模块中的文件,javascript,node.js,npm,Javascript,Node.js,Npm,我有npm模块(),它有可执行文件,我想打开位于该模块目录中的文件。该模块是全局安装的 我想访问模块中与bin目录相关的文件。/examples/helpers.lips,但可执行文件安装在/usr/bin/lips中,我不知道如何访问模块 如何访问该文件或获取模块的根目录?是否有跨平台解决方案 我的可执行文件是lisp解释器,我正在执行以下代码: #!/usr/bin/env lips (load "../examples/helpers.lips") 这是可以理解的,因为CWD是我调用脚

我有npm模块(),它有可执行文件,我想打开位于该模块目录中的文件。该模块是全局安装的

我想访问模块中与bin目录相关的文件
。/examples/helpers.lips
,但可执行文件安装在/usr/bin/lips中,我不知道如何访问模块

如何访问该文件或获取模块的根目录?是否有跨平台解决方案

我的可执行文件是lisp解释器,我正在执行以下代码:

#!/usr/bin/env lips

(load "../examples/helpers.lips")
这是可以理解的,因为CWD是我调用脚本的目录。加载仅为fs.readFile+eval

我的解释器是用JavaScript编写的,因此需要与在Node中相同的工作,在Node中访问的每个函数都可以在lips中访问。但是我想先加载这个文件,因为它有重要的函数和宏。在未来,它可能会被默认加载,但首先我需要访问该模块。如果它在从本地安装的node_模块调用或作为git repo的源调用时也能工作,那就太好了


最近我了解到,如果添加处理程序,您可以将require与文本文件一起使用。这是访问模块内静态文件的唯一方法吗(使用
require(@jcubic/lips/examples/helpers.lips”)
还是更好的方法)。如果我找到关于此问题的文章,我将尝试使用该未记录的功能,并更新问题。

在Node.js文档中找到了解决方案,其功能是function
require.resolve

功能说明如下:

使用内部require()机制查找模块的位置,但只返回解析的文件名,而不是加载模块

这正是我所需要的,这是我使用的函数,在评估用户代码之前运行它:

function boostrap() {
    var path;
    try {
        path = require.resolve('./examples/helpers.lips');
    } catch (e) {
        path = require.resolve('@jcubic/lips/examples/helpers.lips');
    }
    var data = fs.readFileSync(path);
    return run(data, env);
}