将type-graphql项目以production模式进行Webpack编译

我想使用 Code First 来编写 GraphQL 服务器,所以尝试使用了 type-graphql。
在开发模式下使用 webpack 很容易正常运行,但是当部署到 Heroku 上时完全没有作用。
经过一番调查,发现原因是要在生产模式下使用 webpack。
生产模式下会对代码进行压缩和混淆。
使用 Code First 来编写 type-graphql 的话,问题就是如何从压缩和混淆后的代码中正确生成模式。
换句话说,从混淆后的代码中生成模式会出现混乱的情况。
在得出这个结论之前,我经历了相当的困难。
虽然遇到了困难,但我学会了很多东西,比如 Node.js、Express、NestJS、webpack 和 Chrome 调试等。

现在,我们来谈谈在生产模式下使用webpack来处理type-graphql时需要注意的一些事项。

在生产模式下使用webpack时,terser-webpack-plugin将被启用。这是一个用于压缩和混淆代码的模块。由于混淆,类名也会被混淆,所以这将导致用type-graphql创建的模式(例如schema.gql)在开发模式下创建的模式完全不同。

因此,您需要配置 webpack.config.js,以确保类名不会被混淆。

安装 terser-webpack-plugin

安装 terser-webpack-plugin。

在终端中输入以下命令即可安装 terser-webpack-plugin 插件并将其保存至开发环境:npm install terser-webpack-plugin –save-dev。

用于配置webpack的webpack.config.js文件。

在webpack.config.js中,配置以确保不更改类名。
只需按照以下方式即可:

const merge = require('webpack-merge');
const common = require('./webpack.common');
const TerserPlugin = require('terser-webpack-plugin');

module.exports = merge(common, {
    mode: 'production',
    optimization: {
        minimizer: [
            new TerserPlugin({
                terserOptions: {
                    keep_classnames: true, // ← ここ!!
                    drop_console: true
                }
            })
        ]
    }
})

這樣一來,類名將不再被加密,因此即使從代碼中創建GraphQL模式,也能產生符合預期的結果。

bannerAds