webpack - 这个 webpack 警告可以安全忽略吗?

标签 webpack babeljs babel-loader

我在 webpack 中发现了一个奇怪的警告。解析时 process.env使用 babel-loader .在 TypeError: result.setExpression is not a function 中出现警告 ( webpack/lib/Parser.js ) .我在做一个大项目,希望我的核心非常坚固。那么忽略这个警告是否安全,因为 webpack 明确地捕获它并评论“忽略错误”?

警告( TypeError: result.setExpression is not a function )发生在这里(webpack/lib/Parser.js https://github.com/webpack/webpack/blob/2361995a429794d372d61e3fb628dea3929e0ca4/lib/Parser.js#L1987)

evaluateExpression(expression) {
    try {
        const hook = this.hooks.evaluate.get(expression.type);
        if (hook !== undefined) {
            const result = hook.call(expression);
            if (result !== undefined) {
                if (result) {
                    result.setExpression(expression);
                }
                return result;
            }
        }
    } catch (e) {
        console.warn(e);
        // ignore error
    }
    return new BasicEvaluatedExpression()
        .setRange(expression.range)
        .setExpression(expression);
}

我打印了这个 result ,并发现它是
BasicEvaluatedExpression {
  type: 0,
  range: [ 945, 956 ],
  falsy: false,
  truthy: true,
  bool: null,
  number: null,
  regExp: null,
  string: null,
  quasis: null,
  array: null,
  items: null,
  options: null,
  prefix: null,
  postfix: null } 

我还打印了 expression
{
  type: 'MemberExpression',
  start: 945,
  end: 956,
  loc: 
   SourceLocation {
     start: Position { line: 16, column: 13 },
     end: Position { line: 16, column: 24 } },
  range: [ 945, 956 ],
  object: 
   Node {
     type: 'Identifier',
     start: 945,
     end: 952,
     loc: SourceLocation { start: [Object], end: [Object] },
     range: [ 945, 952 ],
     name: 'process' },
  property: 
   Node {
     type: 'Identifier',
     start: 953,
     end: 956,
     loc: SourceLocation { start: [Object], end: [Object] },
     range: [ 953, 956 ],
     name: 'env' },
  computed: false }
process.env来自类似 var isProd = process.env && process.env.NODE_ENV === 'production'; 的东西

背景:

完整的警告信息:
TypeError: result.setExpression is not a function
    at Parser.evaluateExpression (node_modules/webpack/lib/Parser.js:1991:14)
    at hooks.evaluate.for.tap.expr (node_modules/webpack/lib/Parser.js:368:17)
    at SyncBailHook.eval [as call] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:19:10), <anonymous>:7:16)
    at Parser.evaluateExpression (node_modules/webpack/lib/Parser.js:1984:25)
    at parser.hooks.statementIf.tap.statement (node_modules/webpack/lib/ConstPlugin.js:122:28)
    at SyncBailHook.eval [as call] (eval at create (node_modules/tapable/lib/HookCodeFactory.js:19:10), <anonymous>:7:16)
    at Parser.walkIfStatement (node_modules/webpack/lib/Parser.js:1011:41)
    at Parser.walkStatement (node_modules/webpack/lib/Parser.js:961:10)
    at Parser.walkStatements (node_modules/webpack/lib/Parser.js:864:9)
    at Parser.walkBlockStatement (node_modules/webpack/lib/Parser.js:996:8)
    at Parser.walkStatement (node_modules/webpack/lib/Parser.js:931:10)
    at inScope (node_modules/webpack/lib/Parser.js:1603:10)
    at Parser.inScope (node_modules/webpack/lib/Parser.js:1910:3)
    at Parser.walkFunctionExpression (node_modules/webpack/lib/Parser.js:1596:8)
    at Parser.walkExpression (node_modules/webpack/lib/Parser.js:1509:10)
    at Parser.walkAssignmentExpression (node_modules/webpack/lib/Parser.js:1694:8)
    at Parser.walkExpression (node_modules/webpack/lib/Parser.js:1491:10)
    at Parser.walkExpressionStatement (node_modules/webpack/lib/Parser.js:1000:8)
    at Parser.walkStatement (node_modules/webpack/lib/Parser.js:946:10)
    at Parser.walkStatements (node_modules/webpack/lib/Parser.js:864:9)
    at Parser.walkBlockStatement (node_modules/webpack/lib/Parser.js:996:8)
    at Parser.walkStatement (node_modules/webpack/lib/Parser.js:931:10)
    at inScope (node_modules/webpack/lib/Parser.js:1792:10)
    at Parser.inScope (node_modules/webpack/lib/Parser.js:1910:3)
    at Parser._walkIIFE (node_modules/webpack/lib/Parser.js:1780:8)
    at Parser.walkCallExpression (node_modules/webpack/lib/Parser.js:1817:9)
    at Parser.walkExpression (node_modules/webpack/lib/Parser.js:1500:10)
    at Parser.walkVariableDeclaration (node_modules/webpack/lib/Parser.js:1381:32)
    at Parser.walkStatement (node_modules/webpack/lib/Parser.js:979:10)
    at Parser.walkStatements (node_modules/webpack/lib/Parser.js:864:9)
    at Parser.parse (node_modules/webpack/lib/Parser.js:2127:9)
    at doBuild.err (node_modules/webpack/lib/NormalModule.js:446:32)
    at runLoaders (node_modules/webpack/lib/NormalModule.js:327:12)
    at node_modules/loader-runner/lib/LoaderRunner.js:370:3
    at iterateNormalLoaders (node_modules/loader-runner/lib/LoaderRunner.js:211:10)
    at iterateNormalLoaders (node_modules/loader-runner/lib/LoaderRunner.js:218:10)

我的 babel 配置是:
"webpack": "4.25.1",
"babel-core": "6.26.3",
"babel-eslint": "8.2.6",
"babel-loader": "7.1.5",
"babel-plugin-transform-class-properties": "6.24.1",
"babel-plugin-transform-object-rest-spread": "6.26.0",
"babel-plugin-transform-runtime": "6.23.0",
"babel-preset-env": "1.7.0",
"babel-preset-react": "6.24.1",
"babel-register": "6.26.0",


const babelCoreConfig = {
    babelrc: false,
    presets: [
       'babel-preset-env',
       'babel-preset-react'
    ],
    plugins: [
       'babel-plugin-transform-class-properties',
        ['babel-plugin-transform-runtime', {
            helpers: true,
            polyfill: false,
            regenerator: false,
        }],
       'babel-plugin-transform-object-rest-spread'
    ]
};

最佳答案

我遇到了同样的问题,并在解决这个问题上挣扎了大约半天。我在 module.hot 收到此警告表达。我正在使用 react-hot-loader。

我删除了选项 --hotwebpack-dev-server --hot --config ./webpack.dev.config.js --mode development并添加了 webpackHotModuleReplacementPlugin在 webpack 配置中。这解决了这个问题。

这是哪里process.env正在使用?如果它在 webpack 配置中,并且你的 webpack 配置是一个简单的 JS 对象导出,它将是未定义的。

如果它在一个文件中,尝试记录它并检查它是否未定义。

关于webpack - 这个 webpack 警告可以安全忽略吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53205370/

相关文章:

ruby-on-rails - `babel-loader` 在生产中时出现 `rake assets:precompile` 依赖错误

javascript - 在 React-Boilerplate 中使用 Firebase 身份验证时,服务工作线程捕获对 Google 的 __/auth 请求

ruby-on-rails - 如何使用 Webpacker 将 `includePaths` 添加到 Sass 加载器

reactjs - 如何导入 svg 文件并将它们用于图像中的 src

css - 更少的媒体查询似乎没有编译

javascript - 带有 NodeJS 的 Babel 不工作传播运算符

npm - 如何使用 Webpack 为 Babel 包含节点模块

node.js - 很难同时使用 babel 和 jest

javascript - (Vue.js | Jest | Babel) 导入特定 vue 文件时出现意外标记

webpack - Babel 和 EventTarget 的子类