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

Webpack构建Todo应用时JS文件间导入报错求助

解决Webpack中JS文件相互导入的"SyntaxError: cannot use import statement outside a module"错误

问题场景

我正在使用Webpack构建Todo应用,能够将其他JS文件导入index.js,但JS文件之间相互导入时,持续出现“SyntaxError: cannot use import statement outside a module”错误。

相关代码

task.js(被ui.js导入)

import { v4 as uuidv4 } from 'uuid';

export class Task {
  constructor(title, description, dueDate) {
    return Object.assign(this, { id: uuidv4(), title, description, dueDate, completed: false })
  }
}

ui.js

import { Task } from './task.js';

const taskOne = new Task('Hello', "goodbye")

console.log(taskOne);

webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
    clean: true,
    assetModuleFilename: '[name][ext]'
  },
  devtool: 'source-map',
  devServer: {
    static: {
      directory: path.resolve(__dirname, 'dist')
    },
    port: 3000,
    open: true,
    hot: true,
    compress: true,
    historyApiFallback: true
  },
  module: {
    rules: [
      {
        test: /\.scss$/,
        use: ['style-loader', 'css-loader', 'sass-loader']
      },
      {
        test: /\.(png|jpg|jpeg|svg|gif)$/i,
        type: 'asset/resource'
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: 'Todo App',
      filename: 'index.html',
      template: './src/template.html'
    })
  ]
}

修复步骤

1. 确保所有JS文件都在Webpack的依赖链中

Webpack只会打包入口文件(src/index.js)及其递归导入的文件。如果ui.js没有被index.js导入,它不会被打包,浏览器直接加载未打包的ui.js时就会触发模块语法错误。

在index.js中添加对ui.js的导入:

// src/index.js
import './ui.js';

2. 检查导入路径的正确性

确认ui.js中导入task.js的相对路径无误,比如两者在同一目录下时,路径应为./task.js,避免路径错误导致Webpack无法解析依赖。

3. 安装Babel相关依赖

你的Webpack配置中使用了babel-loader,但如果未安装对应依赖,会导致ES6+语法转译失败。执行以下命令安装:

npm install --save-dev babel-loader @babel/core @babel/preset-env

4. 避免在HTML中直接引入未打包的JS文件

检查src/template.html,确保没有手动引入task.js或ui.js。HtmlWebpackPlugin会自动将打包后的bundle.js注入到生成的index.html中,手动引入未打包文件会让浏览器直接解析ES模块语法,引发错误。

5. 验证打包流程

运行npm run build(需确保package.json中有"build": "webpack"脚本),检查dist目录是否生成bundle.js。然后用npm run dev启动开发服务器,确保页面加载的是打包后的文件。

验证

完成上述步骤后,重启开发服务器,控制台应能正常打印taskOne对象,不再出现模块语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:55:23