2017-09-14 63 views
0

我有一個Django應用程序,並使用Django的i18n模塊來幫助翻譯我的字符串。爲了翻譯JavaScript,我運行了Webpack TypeScript和xgettext翻譯

python manage.py makemessages -d djangojs 

它將所有標記的字符串添加到.po文件。這對我靜態文件夾中所有無聊的.js文件都很有效。但是,我們開始使用webpack將一些打字稿(.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; 
  • 那麼,怎樣才能使我的WebPack吐出這些文件?
  • 這是正確的做法,還是有辦法讓Django正確解析bundle.js?

回答

0

原來,所有的eval廢話都是由webpacks「watch」函數產生的。當簡單地運行webpack構建腳本時,它按預期工作