【问题标题】:Why do __filename / __dirname behave weirdly after minifying with webpack?为什么使用 webpack 缩小后 __filename / __dirname 行为怪异?
【发布时间】:2016-10-07 00:01:43
【问题描述】:

有人能解释一下我遇到的这个奇怪的问题吗?

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

index.js

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

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

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

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

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

这个 webpack/uglify 是在转换它不应该转换的东西,还是这只是在生产中运行的缩小代码的本质?我正在努力寻找解决方法,这使得将 dist/static/ 设置为生产中的正确静态目录相当困难。

【问题讨论】:

  • 不是 100% 肯定,但我敢打赌,这是由于缩小 js 中的东西的定义/执行方式。代码不再是该文件的一部分,而是在“外部”运行,这使它看起来好像它在根目录中。
  • 有什么办法可以解决这个问题吗?
  • 这实际上可能是 this question 的副本,其中也包含一个可能的解决方案。

标签: javascript node.js webpack uglifyjs


【解决方案1】:

将以下内容添加到 webpack conf 可以解决此问题。看起来好像 webpack 默认模拟 __dirname 只导致 /。 True 将 __dirname 编译为上下文路径的字符串,而 false 则将 __dirname 留在节点中。

  node: {
    __dirname: false  
  },

为上面 cmets 中的马里奥干杯,为我指明了正确的方向!

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 2012-07-02
    • 2020-01-08
    • 2020-09-01
    • 2016-07-05
    • 2021-08-29
    • 2018-09-10
    • 2021-04-06
    相关资源
    最近更新 更多