源码包离线安装Atom插件90%失败是因为未执行apm install --production构建,该步骤强制生成node_modules、编译原生模块并执行postinstall脚本;必须在与目标机完全一致的Atom版本下运行,否则因依赖解析失败、API不兼容或模块缺失导致插件无法激活。

源码包离线安装 Atom 插件,90% 失败是因为跳过了 apm install --production 这一步——它不是可选项,是构建可运行插件的强制工序。
为什么直接解压 GitHub 源码到 ~/.atom/packages 一定不工作
GitHub 上下载的插件仓库(比如 https://github.com/AtomLinter/linter-gcc)只是源码,不含 node_modules、没编译原生模块、也没执行 postinstall 脚本。Atom 启动时直接 require,立刻报错:
-
Error: Cannot find module 'season'→ 缺node_modules -
Failed to activate package 'linter-gcc' because it depends on 'atom-linter@^2.0.0'→ 依赖未解析或版本不匹配 - 插件列表里显示已安装,但打开 .c 文件完全无响应 → 原生二进制(如
gcc绑定)根本没生成
必须在目标环境上用 apm install --production 构建
离线机用的是 Atom v1.69.0?那构建也必须用完全一致的 v1.69.0 —— 版本差一个小数点都可能触发 Cannot read property 'onDidStopChanging' of undefined。
- 在联网机上,先确认 Atom 版本:
atom --version,再用同版本官方包重装(atom-amd64.deb/AtomSetup-x64.exe) - 进入插件目录:
cd ~/.atom/packages - 执行:
apm install --production linter-gcc(注意:不是npm install) - 构建完成后,检查
linter-gcc/node_modules/gcc和atom-linter是否存在 - 整个
linter-gcc文件夹打包,拷到离线机对应位置
哪些插件源码包根本不能离线用
不是所有插件都能靠“复制 + 构建”搞定。三类插件在断网后必然失效:
- 依赖实时 API 的:
autocomplete-atom-api(启动时拉 GitHub 文档)、platformio-ide(校验云端 toolchain) - 含动态下载逻辑的:
language-rust某些版本首次启用会 fetch rustc 语法定义 - 需要全局
apm运行时的:sync-settings(本质是包装apm login和apm publish)
这类插件即使把 node_modules 完整拷过去,控制台也会卡在 Failed to fetch https://... 或直接抛 ENOTFOUND。
离线机装完插件不生效?先开控制台看报错
别猜,按 Ctrl+Shift+I 打开开发者工具,切到 Console 标签页,重点关注:
-
Error: Cannot find module 'fs-plus'→package.json缺失,或"main"字段指向错误路径(比如写成./src/main.js但实际是./lib/main.js) -
Activation hook 'language-python:grammar-used' not found→ 没装language-python,或它自己也没构建好 - 空白报错但插件灰显 → 检查文件夹名是否和
package.json中"name"完全一致(大小写敏感,autocomplete-python≠Autocomplete-Python)
真正麻烦的不是复制路径,而是每个插件的激活时机、依赖粒度、构建产物结构都不一样——minimap 要 npm run build,go-plus 要调外部 gopls,autocomplete-python 必须等 .py 文件加载后才初始化。离线前,最好在有网环境跑通一次 apm test 看它到底要什么。

















