首页 / Electron 入门教程 / package.json 与脚本配置

Electron 入门教程

package.json 与脚本配置

本教程共 45 篇 · 第 5 篇 · 更新于 2026-08-03

Electronpackage.jsonnpm脚本配置

5. package.json 与脚本配置

本节目标

  • 理解 main 字段如何指定主进程入口。
  • 配置 scripts.start 用 electron . 启动应用。
  • 区分 dependencies 与 devDependencies,及 Electron 为何属开发依赖。
  • 学会锁定 Electron 版本,避免大版本漂移。
  • 对比 Electron 项目与纯前端 package.json 的差异。

package.json 是任何 Node 项目的身份证,对 Electron 来说更是入口说明书。本章讲清几个关键字段,以及它和纯前端项目的区别。理解这些,你的项目才”可被 Electron 识别”。

5-1 main 字段:应用的真正入口

main 字段告诉 Electron 主进程文件在哪。如果省略,Electron 会默认找 index.js。但显式写出来永远是好习惯。

{
  "main": "main.js"
}

Electron 启动后,先读这个文件,执行里面的 app 逻辑,再由它创建窗口。所以 main.js 里至少要引入 appBrowserWindow,并监听 whenReady

提示:若你用 TypeScript 或打包工具,main 应指向编译后的产物,比如 dist/main.js,而不是源码 src/main.ts

5-2 scripts:定义启动命令

scripts 是一组可命名的命令。跑 npm start 时,Electron 执行 electron .,那个 . 表示”在当前目录找 main 字段”。

{
  "scripts": {
    "start": "electron ."
  }
}

你也可以加别的脚本,比如 npm run dev 配合热重载工具。但 start 是约定俗成的开发启动入口,建议保留。

# 启动开发模式
npm start

注意 electron . 只在开发时用。打包成安装包后,用户双击图标启动,不再经过这个命令。

5-3 dependencies 与 devDependencies

依赖分两类。dependencies 是运行时需要的包,会打进最终产物。devDependencies 只在开发期用,比如 Electron 本身、打包工具、测试库。

Electron 放在 devDependencies,原因前面提过:它的接口最终绑定到二进制,打包步骤会把这个二进制一起封进安装包,运行时不靠 npm 拉取。

{
  "devDependencies": {
    "electron": "^43.2.0"
  }
}

如果你的渲染进程用到了 React、lodash 这类运行时库,通常放在 dependencies。但现代前端多用打包工具,把它们一起打进页面,未必需要列在 dependencies

5-4 Electron 版本怎么锁

^43.2.0 表示允许安装 43.x 的补丁和小版本,但不跨大版本。对 Electron 来说,锁定大版本很重要,因为大版本会升级 Chromium 和 Node,可能带来破坏性变更。

{
  "devDependencies": {
    "electron": "43.2.0"
  }
}

想要完全可复现的构建,可以把版本写死成 43.2.0,去掉 ^。团队项目建议这么做,避免不同人装到不同补丁版,调试时互相看不出差异。

查看当前锁定的版本:

npm ls electron

这条命令打印项目里 Electron 的实际安装版本,排查”别人能跑我不能跑”时很有用。

5-5 和纯前端 package.json 的区别

纯前端项目的 main 通常是 index.js 入口模块,靠 npm run dev 起开发服务器,最后部署到网页托管。Electron 项目则把 main 指向主进程,靠 electron . 拉起桌面窗口。

字段纯前端项目Electron 项目
main库入口或忽略主进程文件(必填)
scripts.start起 dev serverelectron . 启动桌面
运行环境浏览器Chromium + Node.js
产物静态资源安装包

另一个区别是 Electron 项目几乎一定会把 Electron 写进 devDependencies,而纯前端项目没有这个依赖。

5-6 一个完整的最小示例

把前面几节拼起来,一个干净的最小 package.json 长这样:

{
  "name": "my-electron-app",
  "version": "1.0.0",
  "description": "Electron 最小示例",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "author": "码上学",
  "license": "MIT",
  "devDependencies": {
    "electron": "43.2.0"
  }
}

加上 main.jspreload.jsindex.html,四个文件凑齐,项目结构就完整了。后续接上打包工具时,这里还会冒出 buildforge.config.js 等字段。

5-7 别忘了 .gitignore

node_modules 体积很大,不该提交进 Git。把 GitHub 的 Node.js 模板 .gitignore 放进项目根目录,能避免误提交依赖。

# 典型的忽略项
echo "node_modules/" >> .gitignore
echo "dist/" >> .gitignore
echo "out/" >> .gitignore

打包产物目录(如 distout)也建议忽略,它们可由构建命令重新生成。

5-8 用 npm scripts 串起开发流程

除了 start,你还可以加更多脚本把常用操作固化下来。比如用 electron . --debug 带调试参数启动,或接一个打包命令。

{
  "scripts": {
    "start": "electron .",
    "dev": "electron . --enable-logging"
  }
}

脚本的本质就是一段 shell 命令的别名,能大幅降低团队新人的上手成本。但注意 start 是约定入口,保持它指向 electron . 最稳妥。

5-9 版本号字段与产物信息

package.json 顶层的 nameversiondescriptionauthor 看似普通,打包成安装包后它们会变成窗口标题、关于面板、安装器显示的信息。

{
  "name": "my-electron-app",
  "version": "1.0.0",
  "description": "我的第一个桌面应用",
  "author": "码上学"
}

所以这些字段别随手填。版本号建议遵循语义化版本(主.次.补丁),方便后续自动更新判断是否需要升级。

5-10 依赖与打包体积的关系

你可能会担心 devDependencies 里的 Electron 会让安装包巨大。其实打包工具(如 Electron Forge)只会把运行必需的二进制和你的代码打进去,开发期的一大堆依赖不会全进安装包。

但渲染进程用到的运行时库,若没经打包工具处理,确实会变大。所以前端代码建议用 webpack、Vite 这类工具先打包压缩,再交给 Electron 加载,能明显减小体积、提升启动速度。

理解 dependenciesdevDependencies 的分工,有助于你判断”这个包该不该打进产物”。规则很简单:只在构建或开发时用,放 devDependencies;运行时真要用到,才放 dependencies。

5-11 name 字段的命名约束

name 字段看着随意,却有几条硬规则。它必须全小写,不能含空格,只能用连字符、下划线或点。大写或空格会在发布时报错。

{
  "name": "my-electron-app"
}

这个名字会进入安装包标识,建议和你的产品名保持一致,只是转成小写连字符形式。改名要慎重,因为它关联到自动更新时的应用身份,中途改名字可能让老用户更新失败。

5-12 锁文件的作用

npm install 时会生成 package-lock.json,它精确记录了每个依赖装的是哪个版本。有了它,别人 npm ci 装到的依赖和你完全一致,避免”在我机器上能跑”的问题。

# 用锁文件精确安装,适合 CI 和生产
npm ci

注意 npm ci 会先删掉 node_modules 再按锁文件重建,比 npm install 更可复现。提交代码时记得把 package-lock.json 一起提交,别把它加进 .gitignore

当 Electron 版本需要升级,改 package.json 里那一行再 npm install,锁文件会自动更新。团队里谁升级了版本,其他人拉下来就能同步,减少环境分歧。

5-13 本章小结

package.jsonmain 指向主进程,scripts.startelectron . 启动,Electron 锁在 devDependencies 并尽量固定大版本。它和纯前端项目的关键差异在于入口与运行环境。

下一章进入应用生命周期,看 app 模块如何掌管启动、激活与退出。