使用 webpack 删除 typescript 生产版本中的断言

Mat*_*lis 7 assert typescript webpack

情况

我正在使用 TypeScript 3.9 和 webpack 4.46。

断言 2.0.0 是这样导入的:

import { strict as assert } from 'assert';
Run Code Online (Sandbox Code Playgroud)

我只使用该assert功能,例如:

assert(i < j);
Run Code Online (Sandbox Code Playgroud)

要求

我想删除生产版本中的断言。进一步来说:

  • 我希望完全删除这些调用assert,而不是以某种方式禁用断言函数。这是因为我希望能够在任何地方添加断言,但知道它们不会影响最终构建的性能。
  • 我希望删除所有断言函数定义,以减少最终代码的大小。

我认为这是主流要求,而且应该很容易。但我找不到解决办法。

到目前为止我所看到的

webpack-unassert-loader

我尝试了webpack-unassert-loader,但记录的用法不起作用:

{
    module: {
        loaders: [
            { test: /\.js$/, loader: "webpack-unassert-loader" }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

Webpack 似乎不喜欢loaders. 我猜使用文档是针对早期的 webpack 的?

我尝试猜测一种不同的配置方式(请参阅下面的 webpack.config.js),但这不起作用(构建的代码中仍然包含断言)。也许我的猜测是错误的(我不是 webpack 专家)。

打字稿插件取消断言

我查看了typescript-plugin-unassert,但有两件事让我感到不安:

  • 每周只有 7 次下载
  • 文档不清楚。例如:

该插件消除了官方页面上介绍的所有断言和断言IsDefined调用。

那么所有其他断言函数呢?哪个“官方页面”?

也许它工作得很好,并且正是我正在寻找的,但我并没有受到鼓励。

断言加

我查看了assert-plus,但/sf/answers/4258321791/中的一条评论让我感到沮丧:

当您通过环境变量停用断言时,该函数不会被删除,而只是函数的内容返回 void。

如果这是正确的,那么它不能满足我的需要。

所以..

我非常感谢任何能够告诉我删除断言的标准、常用路径是什么的人。

webpack.config.js

这是我的胆量webpack.config.js

{
    module: {
        rules: [
            {
                test: /\.ts$/,
                use: ['ts-loader'],
                exclude: /node_modules/
            },
            /* I tried this, but it didn't get rid of the assertions:
            {
                test: /\.js$/,
                use: ["webpack-unassert-loader"]
            },
            */
        ]
    },
        resolve: {
            extensions: [ '.ts', '.tsx', ".js", ".json", ".css"]
        },
        optimization: {
            minimize: getMinimize(env),
                minimizer: [new TerserPlugin({
                    terserOptions: {
                        compress: {
                            pure_funcs: [
                                'console.log',
                                'console.info',
                                // I tried this, just as a guess! But it didn't get
                                // rid of the assertions:
                                'assert',
                            ]
                        },
                    }
                })],
        },
}
Run Code Online (Sandbox Code Playgroud)