Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript __dirname在带有Web包绑定的节点js中不起作用_Javascript_Node.js_Express_Webpack - Fatal编程技术网

Javascript __dirname在带有Web包绑定的节点js中不起作用

Javascript __dirname在带有Web包绑定的节点js中不起作用,javascript,node.js,express,webpack,Javascript,Node.js,Express,Webpack,我当前的目录是 D:\bkp\Programming\TestWorks\nodejs\testApp 但是,当我使用\uuu dirname并试图使用express server显示文件时,会出现此错误 Error: ENOENT: no such file or directory, stat 'D:\views\index.html' 我的代码是 res.sendFile(__dirname + 'views/index.html'); 当我将其与webpack捆绑并运行捆绑文件时,

我当前的目录是

D:\bkp\Programming\TestWorks\nodejs\testApp
但是,当我使用
\uuu dirname
并试图使用express server显示文件时,会出现此错误

Error: ENOENT: no such file or directory, stat 'D:\views\index.html'
我的代码是

res.sendFile(__dirname + 'views/index.html');

当我将其与webpack捆绑并运行捆绑文件时,就会发生这种情况。否则,如果我只运行普通的app.js文件,它就可以正常工作。非常感谢您的帮助。

这是因为webpack可以以不同的方式处理dirname(以及其他特定于节点的内容)。如果您想让它像正常一样运行,请在您的网页配置中使用此选项:

{
    node: {
        __dirname: false
    }
}

请参阅:

webpack将
\uu dirname
设置为
/
,这就是为什么您最终会得到
/views/index.html
,它是文件系统的根,在您的情况下正好是
D:\
。您可以在网页包配置中将
node.dirname
设置为
false
,以不注入它并将其延迟到运行时。请记住,
\uuu dirname
将引用您正在执行的脚本的位置,这意味着捆绑包的位置,而不是原始源

node: {
  __dirname: false
}
“网页包”:“^5.24.4”
默认值取决于
目标
配置属性:

target:'web'
=>
\uu dirname='/'

target:'node'
=>
\uu dirname='output目录的完整路径'


它可以使用
节点
配置属性进行调整,请参见

一些google客户端lib要求在webpack.config中将dirname设置为true。但是对于从文件系统读取邮件模板,我希望dirname是输出dir。是否有办法仅为某些节点模块设置?我的cur解决方法是使用process.cwd()然后使用/dist作为输出目录。但我真的不喜欢这样