我有npm模块(@jcubic/lips),该模块具有可执行文件,我想打开该模块目录中的文件。该模块已全局安装。
我想访问相对于模块中bin目录的文件../examples/helpers.lips
,但是可执行文件安装在/ usr / bin / lips中,我不知道如何访问模块。
如何访问该文件或获取模块的根目录?有跨平台解决方案吗?
我的可执行文件是lisp解释器,我正在执行以下代码:
#!/usr/bin/env lips
(load "../examples/helpers.lips")
这是可以理解的,因为CWD是我从中调用脚本的目录。负载仅为fs.readFile + eval。
我的解释器是用JavaScript编写的,因此所需的工作与Node中的工作相同,并且可以在嘴唇中访问node中访问的每个函数。但是我要首先加载具有重要功能和宏的文件。将来可能会默认加载它,但首先我需要访问该模块。如果从本地安装的node_module调用或作为git repo的源调用它也可以工作,那将是很好的选择。
最近我了解到,如果添加处理程序,则可以对文本文件使用require,这是访问模块内部静态文件的唯一方法(使用require("@jcubic/lips/examples/helpers.lips")
或更好的方法)。如果我找到有关此文章的文章,并尝试更新问题,将尝试使用该未记录的功能。
答案 0 :(得分:0)
在Node.js文档中为modules找到了功能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);
}