apm install --production是唯一有效的离线构建命令,必须在与目标机完全一致Atom版本的联网机器上执行,生成含node_modules的可运行副本,并确保Atom本体为官方deb/rpm/msi/signed安装包。

apm install --production 是唯一有效的离线构建命令
离线安装失败,90% 的原因是跳过了这步——Atom 插件不是“复制源码就能用”,必须生成 node_modules 并完成 Atom 特定的依赖解析与编译。直接 git clone 或下载 GitHub zip 包后扔进 ~/.atom/packages/,启动时大概率报 Error: Cannot find module 'season' 或 Failed to activate package。
正确做法是在一台**与目标离线机完全一致 Atom 版本**(例如都是 v1.69.0)且**联网的机器上**执行:
-
apm install --production linter-gcc(把linter-gcc换成你要装的插件名) - 进入
~/.atom/packages/linter-gcc,确认存在node_modules目录,且里面包含gcc、atom-linter等子目录 - 整个
linter-gcc文件夹打包(含node_modules),拷到离线机对应位置
别用 npm install 替代:它不触发 apm 的 postinstall 脚本(比如原生模块编译、资源路径重写),linter-gcc 会卡在找不到 gcc 二进制;--production 参数必须加,否则会漏掉 runtime 所需的依赖。
Atom 本体安装方式错误,所有离线操作都白搭
如果 Atom 是解压 AtomSetup-x64.zip、或从非官方渠道拿的“绿色版”、或用 .tar.gz 手动部署的,离线插件必然失败——因为缺失 resources/app/apm 二进制和签名验证机制,apm install --production 根本跑不起来。
必须满足以下任一条件:
- Windows:只认
AtomSetup-x64.exe(msi 包也行),双击安装 - Debian/Ubuntu:用官方
atom-amd64.deb,执行dpkg -i,自动补libasound2、libxkbfile1等底层依赖 - CentOS/RHEL:用
atom.x86_64.rpm,yum localinstall解决 glibc 兼容性 - macOS:必须是 Apple 签名的
Atom-mac.zip(不是 GitHub Release 里的无签名 zip)
装完检查 atom --version 和 apm --version 是否能正常输出,再开始插件构建。
哪些插件根本不能离线用
即使你完整拷贝了 node_modules,以下三类插件在离线环境下仍会启动失败或功能残缺:
- 依赖实时 API 的:
autocomplete-atom-api(需连 GitHub 拉最新 API 文档)、platformio-ide(启动强制校验云端 toolchain) - 含动态下载逻辑的:
language-rust某些版本会在首次启用时尝试拉取rustc语法定义,报Failed to fetch https:// - 需要全局
apm运行时支持的:sync-settings本质包装了apm login和apm publish,离线机从未连过服务器就无法初始化
这类插件控制台会卡在加载阶段,或反复报网络错误——不是你装错了,是设计上就不支持离线。
离线机重启后插件不生效?先看 Console 报错
不要凭“插件出现在 Settings → Install 列表里”就认为装好了。打开开发者工具(Ctrl+Shift+I),切到 Console 标签页,重点关注:
-
Error: Cannot find module 'fs-plus'→package.json缺失,或"main"字段指向的入口文件路径错误/大小写不匹配 -
Failed to activate package 'autocomplete-python' because it depends on 'language-python@^2.0.0'→ 前置依赖没装,language-python必须同样用apm install --production构建并拷贝 -
Cannot read property 'onDidStopChanging' of undefined→ 插件构建时 Atom 版本与离线机不一致(如用 v1.72.0 构建,却装到 v1.69.0)
真正麻烦的不是复制文件,而是每个插件对激活时机、依赖粒度、构建产物结构(lib/ vs dist/)、甚至外部二进制(如 gopls)都有隐式要求——离线前最好在有网机器上跑通一次 apm test。

















