【问题标题】:nodejs __dirname is a dot when I try to execute a script directly in package.json file当我尝试直接在 package.json 文件中执行脚本时,nodejs __dirname 是一个点
【发布时间】:2019-12-30 03:29:42
【问题描述】:

这是我的 package.json 文件的一部分:

{
    ...
    "scripts": {
        "run-test": "node -e 'require(`my-test-lib`).whichPath(__dirname )'",
    },
    ...
}

当我将函数参数读入“测试”脚本时,它是一个简单的点 . :-s

我以为__dirname总是绝对的,但事实并非如此......

我暂时使用了process.cwd(),但我很好奇为什么这不起作用。你有线索吗?

在搜索时,我找到了与主题相关的this question,并且我发现相关,但没有答案。

【问题讨论】:

  • 文档将 __dirname 描述为“当前模块的目录名称”。由于您使用-e 标志来执行代码,因此实际上没有加载任何模块,因此不要期望它的实际路径是有意义的。

标签: node.js package.json npm-scripts


【解决方案1】:

__dirname

具有不同的值,具体取决于调用它的文件,而。

@laggingreflex 在 cmets 中提到:“文档将 __dirname 描述为“当前模块的目录名称”。由于您使用 -e 标志执行代码,因此实际上没有加载任何模块,所以它不要指望它有实际的路径是有道理的”

process.cwd()

总是返回相同的值,这是您启动 Node.js 进程的绝对路径(例如,$ node index.js)。

console.log(__dirname); // /project
console.log(process.cwd()); // /project

const test = require('./module');

/* module code

console.log(__dirname); /project/module
console.log(process.cwd()); /project

*/

【讨论】:

  • 请注意,您可以从任何目录(甚至是另一个磁盘中的目录)启动节点进程,因此 process.cwd() 可以根据您启动进程的方式而有很大差异
  • 同意。如上文定义中所述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 2020-12-04
相关资源
最近更新 更多