Как использовать плагин webpack dll в рендеринге на стороне сервера
Я пытаюсь использовать dllPlugin в веб-пакете, чтобы уменьшить размер моего чанка, и я сделал так, чтобы он хорошо работал на стороне клиента, но что-то не так в рендеринге на стороне сервера.
Я использовал это в качестве примера, и чтобы сделать его проще, вот мой демонстрационный код:
webpack.config.dll.js
// webpack.config.dll.js
const path = require('path');
const webpack = require('webpack');
module.exports = {
entry: {
a: ['./a']
},
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].js',
library: '[name]'
},
plugins: [
new webpack.DllPlugin({
path: path.join(__dirname, 'dist', 'manifest.json'),
name: '[name]'
})
]
}
webpack.config.js
// webpack.config.js
const path = require('path');
const webpack = require('webpack');
module.exports = {
entry: './example',
output: {
path: path.join(__dirname, 'dist'),
filename: 'output.js'
},
plugins: [
new webpack.DllReferencePlugin({
context: __dirname,
manifest: require('./dist/manifest.json')
})
]
};
другой код JS и HTML-код
// a.js
module.exports = 'a';
// example.js
console.log(require("./a"));
// index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script src="dist/a.js"></script>
<script src="dist/output.js"></script>
</body>
</html>
если я открою index.html в браузере, он будет работать нормально и выведет "a" в консоли. Но если я извиняюсь node dist/output.js
, он получит ошибку:
/WorkSpace/code/webpack/005_dllPluginDemo_20160813/dist/output.js:64
module.exports = a;
^
ReferenceError: a is not defined
at Object.<anonymous> (/WorkSpace/code/webpack/005_dllPluginDemo_20160813/dist/output.js:64:19)
at __webpack_require__ (/WorkSpace/code/webpack/005_dllPluginDemo_20160813/dist/output.js:20:30)
at Object.module.exports (/WorkSpace/code/webpack/005_dllPluginDemo_20160813/dist/output.js:58:20)
at __webpack_require__ (/WorkSpace/code/webpack/005_dllPluginDemo_20160813/dist/output.js:20:30)
at Object.<anonymous> (/WorkSpace/code/webpack/005_dllPluginDemo_20160813/dist/output.js:48:14)
at __webpack_require__ (/WorkSpace/code/webpack/005_dllPluginDemo_20160813/dist/output.js:20:30)
at /WorkSpace/code/webpack/005_dllPluginDemo_20160813/dist/output.js:40:18
at Object.<anonymous> (/WorkSpace/code/webpack/005_dllPluginDemo_20160813/dist/output.js:43:10)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
так что это означает, что я не могу требовать output.js в моем коде. К сожалению, мне нужно сделать это, когда я пытаюсь выполнить рендеринг на сервере, так же, как этот шаблон
и я думаю, что проблема в том, что модуль а был дважды разобран
Так есть кто-нибудь встречал эту проблему? А как ты это решил, желай твой ответ, спасибо