在 Next.js 中动态导入 abcjs
Posted
技术标签:
【中文标题】在 Next.js 中动态导入 abcjs【英文标题】:Dynamically import abcjs in Next.js 【发布时间】:2021-07-27 19:41:33 【问题描述】:我有一个简单的项目
import Music from '../components/music';
export default function Home()
return (
<Music></Music>
)
import dynamic from 'next/dynamic';
const abcjs = dynamic(import('abcjs'), s-s-r: false );
export default function Music(note)
return (
<>
<div id="paper"></div>
abcjs.renderAbc("paper", "X:1\nK:D\nDDAA|BBA2|\n")
</>
)
我的package.json
是
"name": "music-quiz",
"version": "0.1.0",
"private": true,
"scripts":
"dev": "cross-env NODE_OPTIONS='--inspect' next dev",
"build": "next build",
"start": "next start"
,
"dependencies":
"abcjs": "^5.12.0",
"next": "10.2.0",
"react": "17.0.2",
"react-dom": "17.0.2",
,
"devDependencies":
"cross-env": "^7.0.3"
但是,浏览器告诉我abcjs.renderAbc is not a function
,据我所知,这应该可以工作。
如果有什么不同,我将运行 next.js
和 npm run dev
。
如果我尝试记录 abcjs,我似乎得到了一个空对象。 vscode
告诉我它找不到 abcjs
的声明类型,但这不重要。
显然库没有正确导入,但我不知道为什么会这样。
编辑:我应该补充一点,我发现了这个 example 并将其改编为 next
。
FAQ 中也有关于此的内容,但并没有解决问题
【问题讨论】:
next/dynamic
用于动态导入 React 组件,abcjs
不是。
@juliomalves 你知道如何导入非反应客户端库吗?
【参考方案1】:
next/dynamic
用于动态导入React组件。
要动态导入常规 javascript 库,您只需使用 ES2020 dynamic import()
。
import useEffect from "react";
export default function Music( note )
useEffect(() =>
const abcjsInit = async () =>
const abcjs = await import("abcjs");
abcjs.renderAbc("paper", "X:1\nK:D\nDDAA|BBA2|\n")
;
abcjsInit();
, []);
return (
<div id="paper"></div>
)
【讨论】:
这真的会创建一个单独的块文件吗? @NevinMadhukarK 是的,这将为abcjs
创建一个单独的块,将单独加载。以上是关于在 Next.js 中动态导入 abcjs的主要内容,如果未能解决你的问题,请参考以下文章
Next.js:如何将仅外部客户端的 React 组件动态导入到开发的服务器端渲染应用程序中?
在 getServerSideProps() 中直接导入 next.js API 端点
在 TypeScript 和 Next.js 中使用绝对导入解析模块