当我尝试直接在package.json文件中执行脚本时,nodejs __dirname是一个点

时间:2019-08-25 20:23:27

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

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

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

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

我认为__dirname始终是绝对的,但事实并非如此……

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

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

1 个答案:

答案 0 :(得分:1)

__ dirname

具有不同的值,具体取决于在哪个文件中调用它。

@laggingreflex在评论中提到:“文档将__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

*/