【问题标题】:need to merge json in webpack 2 bundles需要在 webpack 2 包中合并 json
【发布时间】:2017-02-08 14:41:57
【问题描述】:

我需要为每个入口点和语言制作本地化 .json 文件。

我们开发 Angular 应用程序,其中每个指令都可以拥有自己的所有语言的 locale .json 文件。

因此,最好将它们组合到单个文件中以用于每个入口点的语言: index.en.json、index.ru.json、index.cn.json、anotherEntry.en.json、anotherEntry.ru.json、anotherEntry.cn.json

尝试使用

const extractJSON = new ExtractTextPlugin({
filename: '[name].locale.json',
allChunks: true
});
loaders: [
    ...
    {
        test: /\.json$/,
        use: extractJSON.extract({
            use: [
                {
                    loader: 'raw-loader'
                },
                {
                    loader: 'json-loader'
                }
            ]
        })
    }
],
plugins: [..., extractJSON ]

还有一堆不同的加载器...

【问题讨论】:

    标签: angularjs json webpack internationalization


    【解决方案1】:

    试试这个:

    module: {
            rules: [
                {
                    test: /\.js$/,
                    loader: 'babel-loader',
                    exclude: /node_modules/,
                },
                {
                    test: /\.json$/,
                    loader: ExtractTextPlugin.extract({
                      loader: 'json-loader'
                    })
                }
            ]
        },
    
        plugins: [
            new ExtractTextPlugin('bundle.json')
        ]
    

    希望对你有所帮助。

    【讨论】:

    • json-loader with extract-text-plugin-rc3(webpack 2 的最新版本)给出错误“模块构建失败:TypeError:text.forEach 不是函数”
    • 您确定您使用的是正确的插件吗? extract-text-webpack-plugin?
    • 是的。几天前我解决了这个问题,一旦有时间就会写一个答案 - 我用加载器制作了简单的插件。感谢您的帮助。
    【解决方案2】:

    @AwokeN 请检查​​这个 webpack 插件 merge-jsons-webpack-plugin。 https://www.npmjs.com/package/merge-jsons-webpack-plugin

    【讨论】:

    • 试过了,但它不能为每个入口点生成.json,并且不适用于由 require() 或 import() 加载的模块
    • 我没听懂,每个入口点是什么意思....例如,如果您在 /node_modules/module1/... /node_modules/Module2 中有 3 个 json 文件,您可以将其指定为一个输入,我们将所有三个 json 合并到一个 json 文件中,您可以指定任意数量的分组。顺便问一下,您的 json 在编译时或运行时可用吗?
    • hmm..我会试着解释一下,但我的英语会很难)例如 - 我们有一个具有不同前端模块的应用程序 - auth 和 mainPage。因此,最好将该逻辑分离到不同的模块中——也许明天我们会有另一个需要身份验证逻辑的页面模块,并且应用程序中将有 2 个入口点(如果我们将身份验证模块分开,则为三个),并且每个模块可以拥有自己的 css、js、模板和本地化。最后一件事正是我要问的。如果解释不好,请见谅。
    • 顺便说一句 - 我找到了解决方案。谢谢你试图帮助我)
    【解决方案3】:

    不要为此使用ExtractTextPlugin。它用于 css,它执行一些 css 预处理。它替代了@import 语句等。

    要合并 json 文件,请使用 merge-webpack-plugin

    示例配置:

    MergePlugin = require("merge-webpack-plugin");
    module.exports = {
      module: {
        rules: [
          {
            test: /\.(json)$/i, use: [ MergePlugin.loader() ],
            // also yaml there too
            test: /\.(yaml)$/i, use: [ MergePlugin.loader(), 'yaml-loader' ],
          }
        ]
      },
      plugins: [
        new MergePlugin({
          search: './src/**/*.json',
          group: '[name]',
        })
      ]
    }
    

    此示例文件将按文件名分组。每个组将被加载并合并并保存到目标 json 文件中。要要求目标合并文件,您只需要要求一个其源文件并加载它。

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多