Reactjs Can';t使用';财政司司长';在getInitialProps中
当我的视图加载时,我试图在Reactjs Can';t使用';财政司司长';在getInitialProps中,reactjs,typescript,next.js,Reactjs,Typescript,Next.js,当我的视图加载时,我试图在getInitialProps中获取解析文件的内容,问题是它告诉我模块未找到:无法解析“fs”,我不明白为什么-根据文档 我的API路线: import parseCommands, { ICommands } from "../../modules/parser/json"; export const getCommands = (): ICommands => { const commands = parseCommands(&q
getInitialProps
中获取解析文件的内容,问题是它告诉我模块未找到:无法解析“fs”
,我不明白为什么-根据文档
我的API路线:
import parseCommands, { ICommands } from "../../modules/parser/json";
export const getCommands = (): ICommands => {
const commands = parseCommands("data.json");
return commands;
};
我的看法是:
import { NextPage } from "next";
import { getCommands } from "../../pages/api/commands";
import { ICommands } from "../../modules/parser/json";
import styles from "./commands.module.scss";
type Props = {
commands: ICommands;
};
const Commands:NextPage<Props> = ({ commands }) => {
return (
<div className={styles.wrapper}>
{commands}
</div>
);
};
Commands.getInitialProps = async () => {
const commands:ICommands = await getCommands();
return {
commands
};
};
export default Commands;
我做错了什么?您需要更新下一个.js版本- 您可能还需要创建一个包含以下内容的next.config.js文件,以生成客户端包:
module.exports = {
webpack: (config, { isServer }) => {
// Fixes npm packages that depend on `fs` module
if (!isServer) {
config.node = {
fs: 'empty'
}
}
return config
}
}
您需要更新下一个.js版本- 您可能还需要创建一个包含以下内容的next.config.js文件,以生成客户端包:
module.exports = {
webpack: (config, { isServer }) => {
// Fixes npm packages that depend on `fs` module
if (!isServer) {
config.node = {
fs: 'empty'
}
}
return config
}
}
getInitialProps
在服务器端和客户端都运行,因此不进行分支就无法使用fs
。改用getServerSideProps
你可以用Or的答案猜出模块,但它只是在解决问题
或者,您可以在getInitialProps
中进行分支,以确定代码执行时我们是否在服务器上。您不应该在web服务器代码中使用readFileSync
export const getInitialProps = async ({ req }) => {
if (res === undefined) {
return { commands: [] }
}
const fs = await import('fs')
const readFile = fs.promises.readFile;
return { commands: await readFile(...) }
}
getInitialProps
在服务器端和客户端都运行,因此不进行分支就无法使用fs
。改用getServerSideProps
你可以用Or的答案猜出模块,但它只是在解决问题
或者,您可以在getInitialProps
中进行分支,以确定代码执行时我们是否在服务器上。您不应该在web服务器代码中使用readFileSync
export const getInitialProps = async ({ req }) => {
if (res === undefined) {
return { commands: [] }
}
const fs = await import('fs')
const readFile = fs.promises.readFile;
return { commands: await readFile(...) }
}
在前端等待
fs
,这是不可能的,SSR称为服务器端渲染,而不是服务器端操作,这就是为什么不能在react或中执行任何服务器端操作的原因next@Nisharg实际上,在Next.js中,您可以执行服务器端渲染。这是否回答了您的问题?在前端等待fs
,这是不可能的,SSR称为服务器端渲染,而不是服务器端操作,这就是为什么不能在react或中执行任何服务器端操作的原因next@Nisharg实际上,在Next.js中,您可以执行服务器端渲染。这是否回答了您的问题?