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

Angular/Electron项目构建后报错:打包JS的MIME类型非可执行

解决Angular/Electron构建后Bundled JS MIME类型错误问题

我帮你排查过这类问题,这种MIME类型错误在Angular+Electron的构建环节很常见,核心原因是资源路径配置不匹配,导致Electron加载不到正确的JS文件,反而返回了HTML页面,所以触发了MIME type ('text/html') is not executable的报错。下面是具体的修复步骤:

1. 调整Angular构建的基础路径

打开项目根目录下的angular.json,找到architect -> build -> options配置块,确保baseHref设置为相对路径./,这是因为Electron加载本地文件时需要相对路径来定位资源:

"architect": {
  "build": {
    "options": {
      "baseHref": "./",
      "outputPath": "dist/angular-electron-seed",
      // 其他配置...
    }
  }
}

2. 修正Electron主进程的页面加载逻辑

找到你的Electron主文件(通常是main.js/main.ts),区分开发环境和生产环境的页面加载路径:

  • 开发环境继续加载Angular Dev Server的地址
  • 生产环境加载构建后dist目录下的本地index.html

示例代码如下:

const { app, BrowserWindow } = require('electron');
const isDev = require('electron-is-dev');
const path = require('path');

function createWindow() {
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false
    }
  });

  if (isDev) {
    // 开发环境加载Dev Server
    mainWindow.loadURL('http://localhost:4200');
    mainWindow.webContents.openDevTools();
  } else {
    // 生产环境加载构建后的本地HTML文件
    mainWindow.loadFile(path.join(__dirname, '../dist/angular-electron-seed/index.html'));
  }
}

app.whenReady().then(() => {
  createWindow();
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

3. 优化package.json的脚本命令

确保构建和Electron启动的脚本逻辑连贯,比如添加一个生产环境启动脚本:

"scripts": {
  "start": "ng serve",
  "build": "ng build",
  "electron": "electron .",
  "electron:prod": "ng build && electron ."
}

4. 验证构建后的资源路径

执行npm run build后,打开dist/angular-electron-seed/index.html,检查里面的JS、CSS引用路径是否为相对格式(比如./runtime.js而非/runtime.js),如果不是,说明baseHref的配置没有生效,需要重新检查angular.json的设置。

为什么会出现这个问题?

开发阶段Angular的Dev Server会自动处理资源路由和MIME类型,但构建后如果使用绝对路径,Electron加载本地文件时会找不到对应的JS资源,系统会默认返回index.html作为 fallback,导致原本应该加载JS的请求返回了HTML内容,MIME类型自然变成了text/html,触发浏览器的严格MIME类型检查报错。

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

火山引擎 最新活动