Webpack TypeScript 和 xgettext 翻译

Webpack TypeScript and xgettext translations

我有一个 Django 应用程序,正在使用 Django 的 i18n 模块来帮助翻译我的字符串。为了翻译JavaScript,我运行

python manage.py makemessages -d djangojs

这会将所有标记的字符串添加到 .po 文件中。这对我静态文件夹中所有无聊的 .js 文件都非常有效。但是,我们开始使用 webpack 将一些 typescript(.tsx 文件)打包到 bundle.js 文件中。该文件在构建后被复制到静态文件夹,所以我希望 Djangos makemessages 也能从中获取字符串。但是,似乎没有正确解析字符串,因为 bundle.js 中的大部分代码只是用 eval().

包裹的字符串

我相信这意味着我需要 webpack - 除了 bundle.js 文件之外 - 为每个 .tsx 文件创建一个 .js 文件,而不需要所有 eval() 废话,这样 django 的makemessages 可以正确解析。但是,我不知道该怎么做。我当前的配置如下所示

var path = require("path");
var WebpackShellPlugin = require('webpack-shell-plugin');

var config = {
    entry: ["./src/App.tsx"],

    output: {
        path: path.resolve(__dirname, "build"),
        filename: "bundle.js"
    },

    devtool: 'source-map',

    resolve: {
        extensions: [".ts", ".tsx", ".js"]
    },

    module: {
        rules: [
            {
                test: /\.tsx?$/,
                loader: "ts-loader",
                exclude: /node_modules/
            },
            {
            test: /\.scss$/,
                use: [{
                    loader: "style-loader" // creates style nodes from JS strings
                }, {
                    loader: "css-loader" // translates CSS into CommonJS
                }, {
                    loader: "sass-loader" // compiles Sass to CSS
                }]
            },
            {
                test: /\.css$/,
                loader: 'style-loader!css-loader'
            }
        ]
    },

    plugins: [
        new WebpackShellPlugin({
            onBuildEnd:['./cp_to_static.sh'],
            dev: false  // Needed to trigger on npm run watch
        })
    ]
};

module.exports = config;

事实证明,所有的 eval 废话都是由 webpacks "watch" 函数生成的。当简单地 运行 用于构建脚本的 webpack 时,它按预期工作