为什么__filename / __dirname在使用webpack缩小后表现得很奇怪?

时间:2016-06-07 07:42:34

标签: javascript node.js webpack uglifyjs

有人可以解释我曾经遇到的这个奇怪问题。

我有一个以下形状的项目:

index.js

src/
    static/
        favicon.ico
        styles.css
    server.js
    routes.js
    app.jsx
    //[...]

dist/
    /static
        favicon.ico
        styles.css
    server.js

/src dir被编译(通过webpack)并被uglified为/dist目录。根项目目录中的index.js只是一个简单的开关,如果/dist/server.js则需要NODE_ENV=production,如果正在开发则需要/src/server.js

我遇到的问题是__dirname__filename在开发中运行时的行为正常 - 正确报告每个执行文件所在的目录但是,在生产中运行时,报告的唯一目录是index.js所在的根目录。 dist/server.js似乎没有意识到它位于/dist文件夹中,现在似乎认为它位于项目根目录中。怪异!!

这里发生了什么?为什么缩小的dist/server.js认为它嵌套在 ./index.js,但未缩小的src/server.jssrc/目录中正确识别它?

这个webpack / uglify是否会改变它不应该的东西,或者这只是生产中运行的缩小代码的本质?我努力寻找一种解决方法,这使得dist/static/在生产中成为正确的静态目录相当困难。

1 个答案:

答案 0 :(得分:1)

将以下内容添加到webpack conf中可以解决此问题。看起来好像webpack默认情况下会调用__dirname,导致只有/。 True将__dirname编译为上下文路径的字符串,false将__dirname节点放在节点中。

  node: {
    __dirname: false  
  },

在上面的评论中为马里奥干杯,指出我正确的方向!