2016-11-14 71 views
1

需要我有一个类似的代码:地带动态从的WebPack

export default { 
    something: true, 
    mockData: process.env.USE_MOCK && require('./mocks/something.js').default 
}; 

process.env.USE_MOCK被设定为webpack.DefinePlugin要么truefalse。我使用它来启动我的应用程序USE_MOCK=true npm run devnpm run dev以运行模拟数据或不运行。

我希望Webpack在UglifyJS的死代码消除的构建过程中删除这些动态需求,但我注意到它们仍然存在,所以something.js将在构建的包中。

在我的情况下,输出是类似于:

module.exports = { 
    something: true, 
    mockData: (false) && __webpack_require__(181).default 
}; 

有没有一种方法我怎样才能从包中完全删除该进口?

顺便说一句。我认为这样的作品:

let mockData; 
if (process.env.USE_MOCK) { 
    mockData = require('./mocks/something.js').default; 
} 
export default { 
    something: true, 
    mockData 
}; 

我宁愿内联要求,因为我已经有了这种模式不少次。

回答

1

尝试这样:

export default { 
    something: true, 
    mockData: process.env.USE_MOCK ? require('./mocks/something.js').default : undefined 
}; 

或建立模块分别出口:

let module_export; 
module_export.something = true; 

if (process.env.USE_MOCK) { 
    module_export.mockData = require('./mocks/something.js').default; 
} 

export module_export; 
+0

事实上,三元运营商做的伎俩。 'process.env.USE_MOCK? require('./ mocks/something.js')。default:null'也有效,并且有点短。谢谢! – amann