我在 .js 上运行我的 next.js 应用程序localhost:3001。我想从另一个主机 ( localhost:3000)获取脚本。我能做到这样。至于我,使用dynamic import. 但我收到一个错误:'ModuleNotFoundError: Module not found: Error: Can't resolve ' http://localhost:3000/static/fileToFetch.js ' in '/Users/{username}/Desktop/test-project/pages ';
例子:
export const FetchedComponent = dynamic({
loader: () =>
import('http://localhost:3000/static/fileToFetch.js'),
loading: () => 'Loading...',
ssr: false,
});
Run Code Online (Sandbox Code Playgroud)
有可能做到吗?
使用webpack 进行动态导入仅适用于代码拆分。您需要找出如何告诉 webpack 不要更改import()然后在该域中启用 CORS。
另一种方法是编写一个函数,将脚本标记注入正文并返回一个承诺,如下所示:
function importExternal(url) {
return new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = url;
script.async = true;
script.onload = () => resolve(window['external_global_component']);
script.onerror = reject;
document.body.appendChild(script);
});
}
Run Code Online (Sandbox Code Playgroud)
当您正在加载文件时,将加载external_global_component的组件放在全局 ( ) 上。然后,您将能够将它与 NextJS 一起使用dynamic。
export const FetchedComponent = dynamic({
loader: () =>
importExternal('http://localhost:3000/static/fileToFetch.js'),
loading: () => 'Loading...',
ssr: false, // <- must be false, because we are using DOM.
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2175 次 |
| 最近记录: |