删除生产分发文件中的一些代码行?

新手上路,请多包涵

我正在使用 Babel ES5 ES6 Webpack 有一些验证用于减少我在编码时犯的错误。

 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);
    }
}

log 函数中,我验证参数是否是 LogModel 类的实例。这只是为了防止错误。我不希望 if 条件出现在生产中,因为太多 if 条件会减慢应用程序的速度。是否可以生成带验证的开发版本和不带 BabelWebpack 验证的生产版本?

原文由 s1n7ax 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 422
2 个回答

看来其他答案已经过时了。使用 webpack 4,您可以在 webpack 配置中设置 mode: 'production'

在您的代码中,检查开发模式如下:

 if (process.env.NODE_ENV === 'development') {
    if(info instanceof LogModel)
        throw new Error("not a instance of LogModel");
}

当 webpack 使用 mode: 'production' 创建一个 bundle 时,这些 if 子句中的所有代码,连同 if 子句本身,将自动从 bundle 中删除。

不需要显式使用 define 插件(它由 webpack “在幕后”使用),也没有必要使用其他答案中提到的类似 webpack-unassert-loaderwebpack-strip-block 之类的东西.

查看我制作的这个小演示回购来尝试这个: https ://github.com/pahund/webpack-devprod-experiment

原文由 Patrick Hund 发布,翻译遵循 CC BY-SA 4.0 许可协议

webpack-strip-block 是一个很好的解决方案。它在编译时删除生产代码中的代码块。

 /* develblock:start */
/* develblock:end */

不限于 assert s 并且产品中没有冗余代码。

原文由 s1n7ax 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题