【发布时间】:2019-05-25 21:14:59
【问题描述】:
构建服务器端 React 应用程序并在使用 Webpack 时遇到 Style-Loader 问题。
我使用的是“^0.23.1”版本,在运行脚本以捆绑和构建时,Style-Loader 出现问题。
问题是window is not defined
webpack:///./node_modules/style-loader/lib/addStyles.js?:23
return window && document && document.all && !window.atob;
有人遇到过这个问题吗?在查看了 Stack 和 Github 的 style-loader 问题后,我没有找到任何解决方案。
这是我的 webpack 文件:
const path = require('path');
const webpack = require('webpack');
module.exports = {
// webpack to use node
target: 'node',
entry: './src/index.js',
output: {
filename: 'client-build.js',
path: path.resolve(__dirname, 'build/public'),
publicPath: '/build/public'
},
module: {
rules: [
{
test: /\.js$|\.jsx$/,
loader: 'babel-loader',
exclude: '/node_modules/',
options: {
presets: [
'@babel/preset-react'
]
}
},
{
test: /\.(s*)css$/,
loader: ['style-loader', 'css-loader', 'sass-loader']
},
{
test: /\.jpeg$|\.gif$|\.png$|\.svg$|\.woff$|\.ttf$|\.wav$|\.mp3$|\.jpg$|\.pdf$/,
loader: 'file-loader',
query: {
name: 'assets/img/[name].[ext]'
},
},
]
},
plugins: [
new webpack.ProvidePlugin({
"React": "react",
}),
],
}
如果你还有什么需要看的,我可以发帖。
【问题讨论】:
-
您需要使用专为 SSR 设计的加载程序。 github.com/kriasoft/isomorphic-style-loader 是一个选项,但距离上次提交已经有一段时间了。还有github.com/noderaider/universal-style-loader、github.com/creeperyang/iso-morphic-style-loader。祝你好运!
-
我也遇到了这个问题,并且正在遵循本指南,对于帖子的作者来说它似乎工作正常:medium.com/@binyamin/…
-
好的,我想通了。正如@ChristianScott 所说,
style-loader不适用于服务器端渲染。 @T。 Evans,如果 SSR 不是您的意图,请注意配置文件中的target: node设置。将此更改为target: web以针对客户端捆绑,而不是服务器端。这将阻止style-loader将其代码放入您使用 Node.js 运行的服务器端文件中。另外,在我的例子中,即使我有web作为我的目标,我也有entry: { server: './src/index.js' },其中server属性应该是main。当我改变它时,一切正常。 -
感谢跟进@MegaMatt!
-
最后一点。在发布我之前的评论后,我了解到
entry对象内的属性名称不必是特定值。server和main是用于我正在关注的演练的字符串,但它可以是您想要的任何东西。请注意,您选择的值可以使用特殊的[name]语法在配置文件的其他地方引用。同样,在我的例子中,我有另一个 webpack 配置文件已经使用了一个名为server的条目,所以有第二个会导致某种冲突。因此,将其更改为main(或server以外的任何内容)修复了我。
标签: reactjs webpack webpack-style-loader