javascript - 获取主模块的__dirname
问题描述
我正在编写一个 NPM 包,我需要知道,在这个包中,__dirname
主模块的价值是什么。
“主模块”是指不是依赖项的模块。
例子:
a-project
├─ index.js <--- main module
├─ node_modules
│ ├─ my-package <--- can be a symlink
┊ ┊ └─ index.js <--- I'm here
我尝试了两件事:
尝试1(使用当前__dirname
):
const path = require('path');
console.log(`${__dirname}${path.sep}..${path.sep}..`);
const path = require('path');
console.log(path.resolve(__dirname, '..', '..'));
-> 如果包不在node_modules
但符号链接在中,则不起作用node_modules
(某些包管理器如 pnpm 会这样做)
尝试2(使用process.argv[1]
):
const escapeStringRegexp = require('escape-string-regexp');
const path = require('path');
const escapedPathSep = escapeStringRegexp(path.sep);
console.log(process.argv[1].match(new RegExp(`^(.*)${escapedPathSep}.*$`))[1]);
const path = require('path');
console.log(path.dirname(process.argv[1]));
-> 当主模块由 pm2 启动时在生产中不起作用,因为process.argv[1]
成为 pm2 的位置
我虽然使用callsite但我认为如果包不是主模块的直接依赖项,它将无法工作。
解决方案
主模块的 __dirname 可以找到如下:
require('path').dirname(require.main.filename);
由于Yury Tarabanko发表了评论而不是答案,因此我在此处发布了他的回复,以便我可以将问题标记为已解决。
推荐阅读
- kubernetes - 为 docker 配置后,minikube 不再运行
- python - 无法导入循环导入问题的名称“app”
- shell - 如何使用相同的文件夹名称 tar gzip
- shell - 如何获取从最后一个匹配到文件末尾的行?
- r - 使用 optim() 求解方程
- angular - 错误 TS2484 和 TS2416 使用带角度的全日历
- typescript - 使用通用字符串作为对象的键
- android - Autocompletetextview 返回指定为非空的参数为空
- django - 我使用 Django 作为后端和 Reactjs 作为前端,那么我必须使用什么来路由 url
- java - Spring Cloud Gateway 和容错