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

标签 javascript webpack babeljs

我正在使用 BabelWebpackES6 生成 ES5 代码。有一些验证可用于减少我在编码时犯的错误。

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 生成带验证的开发版本和不带验证的生产版本?

最佳答案

看来其他答案已经过时了。使用 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-loader 这样的东西webpack-strip-block 在其他答案中提到。

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

关于javascript - 删除生产分发文件中的一些代码行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45776264/

相关文章:

javascript - 使用 jQuery 选择器编辑帖子

javascript - 如何向谷歌云功能添加异步?

循环内的 JavaScript 闭包——简单实用的例子

javascript - 如何将 React 库提取到单独的包中?

error-handling - 带有 webpack 的 Babel polyfill

javascript - 在 Angular 应用程序中将 FirebaseAuth.onAuthStateChanged 调用放在哪里?

Webpack 5 生产模式导致应用程序损坏

javascript - 添加 JS 文件 - Webpack - 静态站点样板

javascript - 如何在基于 TypeScript 的 React Native 应用程序中配置导入的绝对路径?

ecmascript-6 - babel 如何实现 Set/Map polyfills