【问题标题】:Injecting variables into webpack将变量注入 webpack
【发布时间】:2015-03-24 14:05:33
【问题描述】:

我正在尝试将一个变量注入到我的 webpack 包中的每个模块中,以便为每个文件提供 JS 错误的调试信息。我已启用

node: {
   __filename: true
}

Current file path in webpack

在我的 webpack.config 中,但我想注入类似的东西

var filename = 'My filename is: ' + __filename;

编译前进入每个模块。我已经看到带有raw 选项的Banner Plugin,但似乎这只会在webpack 闭包之外注入横幅,而不是我想要的将脚本注入每个模块的结果。

【问题讨论】:

    标签: javascript requirejs commonjs webpack


    【解决方案1】:

    我使用变量来解析我的webpack.config.js 文件中的几个变量:

    plugins: [
        new webpack.DefinePlugin({
          ENVIRONMENT: JSON.stringify(process.env.NODE_ENV || 'development'),
          VERSION: JSON.stringify(require('./package.json').version)
        })
    ]
    

    它可能不够动态,但如果是,那么您也许可以绕过该加载程序解决方案。

    【讨论】:

    • 要动态传递变量,你仍然可以使用这个插件。构建时就说:webpack --define myurl="localhost:3000"
    • 为什么在 process.env.NODE_ENV 上使用 JSON.stringify?
    • 如果,比如说,VERSION 被用作代码中的变量,而 JSON.stringify 没有被使用(或另一种添加引号的机制),那么你最终会得到这样的东西(编译器错误) : console.log(VERSION) -> console.log(1.0.0),当你想要 console.log("1.0.0")
    • 这是我认为最好的方法。
    【解决方案2】:

    编写你自己的加载器:

    my_project/my_loaders/filename-loader.js:

    module.exports = function(source) {
      var injection = 'var __filename = "' + this.resourcePath + '";\n';
      return injection + source;
    };
    

    将其添加到您的管道并确保也添加配置:

    resolveLoader: {
      modulesDirectories: ["my_loaders", "node_modules"]
    }
    

    请参阅how to write a loader 上的文档。

    【讨论】:

    猜你喜欢
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2016-08-14
    • 2022-08-19
    • 2019-10-21
    • 2013-07-08
    • 2017-09-29
    相关资源
    最近更新 更多