如何从webpack bundle中排除一些对象属性?

时间:2016-08-19 12:49:15

标签: webpack

在我的项目中,我使用webpack捆绑JavaScript,并且我有导出js-objects的模块,如:

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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