开发者问题收集

Next.js | 导入具有 Fs 依赖项的模块

2021-07-19
1783

我尝试导入 glsl ( import glsl from "babel-plugin-glsl/macro"; ),但我遇到的问题是,我收到“找不到模块:无法解析‘fs’”的错误,或者因为我使用

module.exports = {
  future: { webpack5: false },
  webpack: (config) => {
    config.resolve.fallback = { fs: false, module: false };

    return config;
  },
};

配置了我的 next.config.js 文件,因此出现“找不到模块:无法解析‘路径’”的错误。

我阅读了数十篇文章,了解到 fs 文件只能在服务器端访问,并且使用它的唯一方法是在 getStaticProps 或 getServerSideProps 中,但无论我做什么,我都无法使用它,而且真的不知道或不理解如何设置它,以便我可以在这样的组件中使用它:

import { Canvas, extend } from "@react-three/fiber";
import { shaderMaterial } from "@react-three/drei";
import glsl from "babel-plugin-glsl/macro"; // <--- Module to import

const WaveShaderMaterial = shaderMaterial(
  // Uniforms
  {},              

  // Vertexshader
  glsl`            // <--- Here in Use

  `,
  // Fragmentshader
  glsl`            // <--- Here in Use
  
  `
);

extend({ WaveShaderMaterial });

const Plane = () => {
  return (
    <mesh>
      <planeBufferGeometry args={[2, 2, 16, 16]} />
      <waveShaderMaterial color="red" />
    </mesh>
  );
};

const Scene = () => {
  return (
    <Canvas>
      <ambientLight intensity={1.0} />
      <Plane />
    </Canvas>
  );
};

export default Scene;

我的问题是:我如何或者您是否会从“babel-plugin-glsl”(或任何其他)导入 glsl模块)需要 fs 吗?

1个回答

我从 ReadMe 中看到,您可以使用 babel 插件 babel-plugin-macro

在项目的根目录中创建以下 .babelrc 文件。

// .babelrc
{
  "presets": [
    "next/babel"
  ],
  "plugins": [
    "babel-plugin-macros"
  ]
}

无需编辑 next.config.js

注意:确保您已在 devDependencies 中安装了 @babel/core

这是一个有效示例。

Mohcka
2021-11-21