【发布时间】:2020-09-30 23:12:42
【问题描述】:
我正在尝试使用 React for Nextjs 9.4 创建一个简单的 UI 库,这就是我在做什么
// input.js in React UI Lib
import React from "react";
import styled from "./input.module.scss";
const Input = React.forwardRef((props, ref) => (
<>
{props.label && <label className={styled.label}>{props.label}</label>}
<input className={styled.input} {...props} ref={ref} />
</>
));
export default Input;
并为简单起见制作了导出所有模块的索引
// app.js the index file for the lib
import PrimaryButton from "./components/button/primaryButton";
import TextInput from "./components/input/input";
import PasswordInput from "./components/passwordInput/password";
import CheckBox from "./components/checkbox/checkbox";
export {
PrimaryButton,
TextInput,
PasswordInput,
CheckBox
};
这也是我为 SSR Next 构建的 webpack 配置
const path = require("path");
const autoprefixer = require("autoprefixer");
const nodeExternals = require("webpack-node-externals");
const CSSLoader = {
loader: "css-loader",
options: {
modules: "global",
importLoaders: 2,
sourceMap: false,
},
};
const CSSModlueLoader = {
loader: "css-loader",
options: {
modules: true,
importLoaders: 2,
sourceMap: false,
},
};
const PostCSSLoader = {
loader: "postcss-loader",
options: {
ident: "postcss",
sourceMap: false,
plugins: () => [autoprefixer()],
},
};
const SassLoader = {
loader: "sass-loader",
options: {
// Prefer `dart-sass`
implementation: require("sass"),
},
};
module.exports = {
target: "node",
entry: "./src/app.js",
output: {
path: path.resolve(__dirname, "dist"),
filename: "bundle.js",
chunkFilename: "[id].js",
publicPath: "",
library: "",
libraryTarget: "commonjs",
},
externals: [nodeExternals()],
resolve: {
extensions: [".js", ".jsx"],
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
loader: "babel-loader",
exclude: /node_modules/,
},
{
test: /\.(sa|sc|c)ss$/i,
exclude: [/node_modules/, /\.module\.(sa|sc|c)ss$/i],
use: ["style-loader", CSSLoader, PostCSSLoader, SassLoader],
},
{
test: /\.module\.(sa|sc|c)ss$/i,
exclude: /node_modules/,
use: ["style-loader", CSSModlueLoader, PostCSSLoader, SassLoader],
},
{
test: /\.(png|jpe?g|gif)$/,
loader: "url-loader?limit=10000&name=img/[name].[ext]",
},
],
},
};
1-i 构建
2-在 npm 上发布
3-在 Nextjs 中导入
然后一切正常,但问题是当我在开发过程中尝试刷新 (F5) 页面时出现错误
Unhandled Runtime Error
ReferenceError: document is not defined
我该如何解决?
【问题讨论】:
-
你没有访问窗口|| SSR 期间的文档,因此请尽量防止在此期间进行渲染,例如
typeof window !=== 'undefined' ? <Component /> : null -
@Mashiro 我已将组件更改为
typeof window !== 'undefined' ? <> {props.label && <label className={styled.label}>{props.label}</label>} <input className={styled.input} {...props} ref={ref} /> </> : null,仍然是同样的错误 -
你能提供你捆绑文件的链接吗
-
我知道为什么会发生检查答案
标签: reactjs webpack next.js server-side-rendering