You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS 14.1.3项目导入外部JS库文件失败求助

解决NextJS 14.1.3中next/script导入本地JS文件找不到的问题

核心问题:静态资源路径错误

NextJS的public目录是项目的静态资源根目录,引用该目录下的文件时,不需要在路径中添加/public前缀,Next会自动从public目录开始查找资源。你当前的路径/public/js/xxx.js会导致Next去寻找不存在的public/public/js/xxx.js路径,因此报文件找不到错误。

修改后的代码

将Script组件的src路径去掉/public前缀:

import Script from 'next/script';

render() {
    const {Component, pageProps}: any = this.props;
    const stores = getStores();

    return (
        <StoreProvider value={stores}>
            <Script
                src='/js/LunaPass.1.6.8.js'
                strategy="beforeInteractive"
            />
            <Script
                src='/js/LPMessageRenderer.1.6.8.js'
                strategy="beforeInteractive"
            />
            <Component {...pageProps} />
        </StoreProvider>
    );
}

额外注意事项

  • 文件路径校验:确认你的JS文件确实存放在项目根目录的public/js/文件夹下,文件名(包括版本号、大小写)完全匹配,Linux/macOS环境下文件名大小写敏感,要格外注意。
  • 脚本加载时机:beforeInteractive策略会在页面HTML渲染前加载脚本,适合全局可用的工具类脚本。如果你的脚本需要依赖React组件挂载后的状态,可以考虑切换为afterInteractive或lazyOnload策略。
  • 全局变量访问:脚本加载完成后,若要在React组件中调用脚本暴露的全局变量(比如LunaPass),直接通过window.LunaPass访问即可。如果需要确保脚本加载完成后再执行逻辑,可以使用Script组件的onLoad回调:
    <Script
        src='/js/LunaPass.1.6.8.js'
        strategy="beforeInteractive"
        onLoad={() => {
            // 脚本加载完成后执行初始化或调用逻辑
            window.LunaPass.init();
        }}
    />
    

内容的提问来源于stack exchange,提问作者K01Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:57:45