s1n*_*7ax 9 javascript babel webpack
我正在使用Babel并Webpack从中生成ES5代码ES6.有一些验证用于减少我在编码时所犯的错误.
class Logger {
/**
* @param {LogModel} info
* {LogTypes} type
* {String} message
* {Date} date
*/
static log(info) {
if(info instanceof LogModel)
throw new Error("not a instance of LogModel");
notify(info);
}
}
Run Code Online (Sandbox Code Playgroud)
在log函数中,我验证参数是否是LogModel类的实例.这只是为了防止错误.我不希望如果条件在生产中,因为太多,如果条件会减慢应用程序.是否可以使用验证和生产版本生成开发版本,而无需使用Babel和Webpack?
Pat*_*und 13
看来其他答案已经过时了.使用webpack 4,您可以mode: 'production'在webpack配置中进行设置.
在您的代码中,检查这样的开发模式:
if (process.env.NODE_ENV === 'development') {
if(info instanceof LogModel)
throw new Error("not a instance of LogModel");
}
Run Code Online (Sandbox Code Playgroud)
当webpack创建一个包时mode: 'production',这些if子句中的所有代码以及if子句本身将自动从包中删除.
没有必要明确使用define插件(它由webpack"引擎盖下"使用),并且没有必要使用类似webpack-unassert-loader或webpack-strip-block在其他答案中提到的内容.
看看这个我试过的小演示回复:https://github.com/pahund/webpack-devprod-experiment
您可以使用assert包来强制执行您的代码,然后使用webpack-unassert-loader或webpack-strip-assert来去除生产代码的断言。
var assert = require('assert').ok;
class Logger {
/**
* @param {LogModel} info
* {LogTypes} type
* {String} message
* {Date} date
*/
static log(info) {
assert(info instanceof LogModel, "Param must be an instance of LogModel");
notify(info);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
更清洁的选项将使用webpack中的define-plugin.
在配置文件中:
new webpack.DefinePlugin({
__DEV: JSON.stringify(true)
})
app.js:
if(__DEV){
console.log("logged only in dev env")
}
值__DEV将由webpack在编译时提供.
webpack-strip-block是一个很好的解决方案。编译时,它将删除生产代码中的代码块。
/* develblock:start */
/* develblock:end */
Run Code Online (Sandbox Code Playgroud)
不限于asserts,并且prod中没有冗余代码。
| 归档时间: |
|
| 查看次数: |
4581 次 |
| 最近记录: |