You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用SystemJS运行Hello World模块时出现404 Fetch错误求助

解决SystemJS模块加载404错误的方案

看起来你遇到了SystemJS模块加载的路径问题,404错误说明SystemJS找不到你要导入的模块文件。咱们一步步来排查解决:

  • 先确认文件结构是否正确
    首先检查你的项目文件是否都在正确的位置,标准的结构应该和你的localhost服务根目录对应:

    项目根目录/
    ├── index.html
    ├── system.js
    ├── main.js
    └── module.js  // 你在main.js里导入的模块文件,名字要和导入语句完全对应
    

    如果module.js不存在,或者放在了子文件夹里,肯定会触发404错误。

  • 检查main.js里的导入路径
    错误提示里提到Instantiating http://localhost:3000/module,说明你的main.js里应该有类似import xxx from 'module'的语句。SystemJS默认会把这种无相对路径的导入当成根目录下的module.js,如果你的模块文件名不是这个,或者需要指定相对路径,要及时调整:

    • 如果模块和main.js同目录,改成import xxx from './module.js'(加上./明确表示当前目录)
    • 如果模块在子文件夹,比如src/module.js,要写import xxx from './src/module.js'
  • 配置SystemJS的基础路径
    给SystemJS加个基础配置,避免路径解析出错。在index.html里的SystemJS.import之前加上配置:

    <script src="./system.js"></script>
    <script>
      SystemJS.config({
        baseURL: './', // 明确指向项目根目录
        defaultExtension: 'js' // 自动给无后缀的模块名加上.js后缀
      });
      SystemJS.import('main.js');
    </script>
    

    这样SystemJS会按照你指定的baseURL去查找所有模块,减少路径歧义。

  • 确认服务器的服务目录
    你用localhost:3000运行项目,要确保你的服务器(比如http-server、live-server)是从项目根目录启动的。比如如果你在父目录启动服务器,那http://localhost:3000/module会指向父目录下的module.js,自然找不到。重新从项目根目录启动服务器即可。

  • 检查文件名大小写
    注意Linux/macOS系统是大小写敏感的,如果你的模块文件名是Module.js,但导入时写的module,就会出现404。要保持文件名和导入语句的大小写完全一致。

示例代码参考

如果按照正确配置,你的文件内容应该类似这样:

  • module.js
    export const message = 'Hello World from module!';
    
  • main.js
    import { message } from './module.js';
    // 把模块内容添加到页面
    document.body.innerHTML += `<p>${message}</p>`;
    console.log(message);
    
  • index.html
    <html>
    <body>
      <p>Hello World from html!</p>
      <script src="./system.js"></script>
      <script>
        SystemJS.config({
          baseURL: './',
          defaultExtension: 'js'
        });
        SystemJS.import('main.js');
      </script>
    </body>
    </html>
    

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

火山引擎 最新活动