apm install --production 是离线插件构建的唯一可靠方式,需在与目标机完全一致的 Atom 版本下执行,生成含必要依赖的 node_modules,禁用 npm install 替代。

apm install --production 是离线插件构建的唯一可靠方式
直接复制 GitHub 源码到 ~/.atom/packages/ 几乎必然失败,因为 Atom 启动时不会自动装依赖,也不会执行构建脚本。真正能跑起来的插件必须带 node_modules,而这个目录只能由 apm install --production 生成。
常见错误现象包括:重启 Atom 后插件不显示、控制台报 Error: Cannot find module 'season' 或 Failed to activate package 'linter-gcc'。
- 必须在与目标离线机**完全一致的 Atom 版本**下运行该命令(比如离线机是 v1.69.0,构建机也得是 v1.69.0)
-
--production参数不能省:它跳过devDependencies,避免装无关模块导致体积膨胀或兼容性问题 - 执行后务必进入插件目录(如
~/.atom/packages/linter-gcc)确认node_modules存在,且里面包含gcc、atom-linter等实际子目录 - 不要用
npm install替代——即使成功,也会漏掉apm特有的 postinstall 步骤(比如编译 native 模块、写入 Atom 版本校验信息)
Atom 本体安装方式错误会导致所有离线插件失效
很多用户以为“解压即用”,结果怎么拷插件都不生效。根本原因是:非官方安装包(如 AtomSetup-x64.zip、.tar.gz、第三方绿色版)缺失 resources/app/apm 二进制文件,或被删减签名验证逻辑,导致 apm 命令本身无法运行。
检查方法:打开终端执行 apm --version,若报错或无输出,说明本体安装已损坏。
- Windows:只认
AtomSetup-x64.exe(msi 包也可),.zip是无效包,双击无响应 - Debian/Ubuntu:必须用
atom-amd64.deb,执行dpkg -i;别用.tar.gz,它不解决libasound2、libxkbfile1等底层依赖 - CentOS/RHEL:用
atom.x86_64.rpm,配合yum localinstall自动处理 glibc 版本 - macOS:必须用官网
Atom-mac.zip(Apple 签名完整包),不是 GitHub Release 里的源码压缩包
哪些插件本质上无法离线使用
不是所有插件都能靠“拷文件+装依赖”搞定。三类插件在离线环境下必然失败,提前识别可避免白忙活。
- 依赖实时 API 的插件:
autocomplete-atom-api(需连接 GitHub 获取最新 API 文档)、platformio-ide(启动强制校验云端 toolchain) - 含动态下载逻辑的插件:
language-rust某些版本会在首次启用时拉取rustc语法定义;atom-ide-ui会尝试下载 LSP server - 需要全局
apm运行时支持的插件:sync-settings本质包装了apm login和apm publish,离线机没连过服务器就无法初始化
这类插件即使把整个 node_modules 拷过去,启动时也会卡在加载阶段,控制台报 Failed to fetch https://... 或 Network Error。
离线机插件不生效?先看 DevTools 控制台报错
别凭“Settings → Packages 里显示 Enabled”就认为装好了。打开开发者工具(Ctrl+Shift+I),切到 Console 标签页,真实线索都在这里。
-
Error: Cannot find module 'fs-plus'→ 插件根目录缺package.json,或"main"字段指向不存在的入口文件(注意大小写,Windows 下敏感) -
Cannot read property 'onDidStopChanging' of undefined→ 插件构建时用的 Atom 版本与离线机不一致(例如构建用 v1.72.0,离线机是 v1.69.0) -
Activation hook 'language-python:grammar-used' failed→ 缺少前置依赖,比如language-python没装,或它自己也没构建好 - 空白无报错但功能不触发 → 检查插件是否依赖其他服务(如
linter需要linter-ui-default才能显示面板)
最麻烦的不是路径或权限,而是每个插件激活时机、依赖粒度、构建要求都不同——autocomplete-python 靠语法包触发,go-plus 得调外部 gopls 二进制,minimap 需要先 npm run build 产出 dist/。离线部署前,最好先在有网机器上跑通一次 npm install && apm test,看它到底依赖什么。

















