Универсальный рендеринг — это круто. Тем не менее, это также проблема, связанная с различными требованиями на стороне сервера.Зависимые файлы ресурсов, такие как css или ресурсы изображений, не могли быть импортированы как рендеринг на стороне сервера с помощью дефолт. babel-plugin-webpack-loaders — отличный плагин для Babel. Он использует систему загрузчика webpack для правильного анализа ресурсов. После того, как вы установите его, вы можете настроить плагин в .babelrc или зарегистрировать способ, чтобы сообщить Babel, как требовать эти файлы, кроме javascript. Конфигурация проста. Во-первых, вы должны предоставить конфигурацию веб-пакета, единственная необходимая часть — это libraryTarget, который должен быть установлен в commonjs2 в выходной части:

output: { libraryTarget: ‘commonjs2’ }

Затем просто установите загрузчики веб-пакетов обычными способами:

 loaders: [ { 
  test: /\.css$/, 
  loaders: [ ‘style-loader’, ‘css-loader’, ‘postcss-loader’, ] 
 } ]

минимальная конфигурация для css-загрузчика

Вы можете загрузить свой Babel с помощью настройки в .babelrc. Имеет смысл настроить его способом register:

require(‘babel-core/register’)({
 “plugins”: [
 [“babel-plugin-webpack-loaders”,
 { “config”: “./webpack.config.universal.js”, “verbose”: false }]
]})
//server start here
require('./my-express-server')

Вот и все! теперь все должно работать нормально. Кроме того, возможно, вы захотите объединить ресурсы с помощью ExtratTextPlugin для создания имен файлов чанков. Вы также можете использовать assets-webpack-plugin, чтобы получить связанные имена файлов, записанные в определенный файл json:

{“main”:{“js”:”/static/main.2bcf7ddc93ada922416e.js”,”css”:”/static/main-79e081feef5d69b7eb56.css”}}

и получить доступ к этим именам файлов, просто прочитав файл ресурса:

const assets = JSON.parse(fs.readFileSync(‘./build/assets.json’, ‘utf-8’))

Теперь у вас есть эти объединенные имена файлов.