2017-02-08 2 views
0

Мне нужно сделать локализацию .json файлов для каждой точки входа и языка.необходимо объединить json в webpack 2 пакета

Мы разрабатываем угловое приложение, в котором каждая директива может иметь свои собственные локальные файлы .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 ] 

и кучу разных погрузчиков ...

ответ

0

Попробуйте это:

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

    plugins: [ 
     new ExtractTextPlugin('bundle.json') 
    ] 

Надеюсь, это поможет вам.

+0

json-loader с extract-text-plugin-rc3 (последний для webpack 2) дает ошибку «Ошибка сборки модуля: TypeError: text.forEach не является функцией» – AwokeN

+0

Вы уверены, что используете правильный плагин? 'extract-text-webpack-plugin'? – ickyrr

+0

есть. Я решил, что пару дней назад напишу ответ, как только у тебя найдется время для этого - я сделал простой плагин с загрузчиком. Спасибо за помощь. – AwokeN

0

@AwokeN Пожалуйста, проверьте этот плагин webpack plug-mers-jsons-webpack-plugin. https://www.npmjs.com/package/merge-jsons-webpack-plugin

+0

попробовал это, но он не может сгенерировать .json для каждой точки входа и не работает с модулями, загруженными require() или import() – AwokeN

+0

. Я не получил вас, что вы имели в виду под каждой точкой входа ... например если у вас есть 3 файла json в/node_modules/module1/.../node_modules/Module2, вы можете указать это как вход, и мы объединяем все три json в один файл json, вы можете указать любое количество группировок как таковых. Кстати, ваш json доступен во время компиляции или времени выполнения? –

+0

hmm..Ill попытаюсь объяснить, но это было бы довольно сложно с моим английским). Например, у нас есть приложение с различными модулями интерфейса - auth и mainPage. Поэтому было бы неплохо разделить эту логику в разных модулях - может быть, завтра у нас будет еще один модуль страницы, для которого потребуется логика auth, и это будет 2 точки входа в приложение (или три, если мы отделим модуль auth), и каждый модуль может иметь собственные CSS, js, шаблоны и локализацию. И последнее, что я спрашивал. Извините, если объяснение не очень хорошее. – AwokeN

0

Не используйте для этого 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. Чтобы требовать объединенного файла назначения, вам нужно только потребовать один его исходный файл и загрузить его.

Смежные вопросы