【问题标题】:How to exclude some object properties from webpack bundle?如何从 webpack 包中排除一些对象属性?
【发布时间】:2016-08-19 12:49:15
【问题描述】:

在我的项目中,我使用 webpack 来捆绑 JavaScript,并且我有一些模块可以导出 js 对象,例如:

module.exports = {
  name: 'Test',
  tableName: 'TestTable',
  properties: {
    id: {
      description: 'identifier',
      columnName: 'id'
    },
    title: {
      description: 'title or something',
      columnName: 'title'
    }
  }
}

这些模块供后端和前端使用。但我不想在 webpack 包中看到像“tableName”和“columnName”这样的属性。有没有办法排除它们或它们的值,但保留模块的其余部分?

UPD。我认为这可以是一种解决方案:

webpack.config.js

var webpack = require('webpack');

module.exports = {
  entry: './index.js',
  output: {
    path: './build/',
    filename: 'bundle.js'
  },
  plugins: [
    new webpack.DefinePlugin({
      P: JSON.stringify(true)
    })
  ]
};

index.js:

var entity = require('./entity.js');

console.log(entity.tableName)

entity.js:

module.exports = {
  name: 'test',
  tableName: !P && 'TestTable'
}

webpack -p

输出:

bundle.js:1 false

【问题讨论】:

    标签: webpack


    【解决方案1】:

    您可以将全局常量与DefinePlugin 一起使用。

    定义插件

    DefinePlugin 允许您创建可以在编译时配置的全局常量。这对于允许开发构建和发布构建之间的不同行为非常有用。例如,您可以使用全局常量来确定是否发生日志记录;也许您在您的开发版本中执行日志记录,而不是在发布版本中。这就是 DefinePlugin 所促成的那种场景。

    示例

    new webpack.DefinePlugin({
        PRODUCTION: JSON.stringify(true)
    })
    if (PRODUCTION)
        //here you can have your conditional objects which you want to build or not
    

    【讨论】:

      【解决方案2】:

      恕我直言,这不是 webpack 范围的一部分。但是,您可以根据我猜的一些 ENV 变量添加/删除成员。

      【讨论】:

      • 感谢您的提示!
      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 2021-11-22
      • 2011-05-16
      • 2018-09-10
      相关资源
      最近更新 更多