Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Can';t使用';财政司司长';在getInitialProps中_Reactjs_Typescript_Next.js - Fatal编程技术网

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中,您可以执行服务器端渲染。这是否回答了您的问题?