必须用apm install --production而非npm install,因后者忽略engines.atom校验、不调用node-gyp编译原生模块、不执行postinstall脚本,导致依赖缺失或功能失效。

直接用 apm install --production,别碰 npm install —— 后者根本不会触发 Atom 插件所需的构建流程,缺失的依赖和 native 模块都不会补上。
为什么 npm install 在插件目录里跑不通
Atom 插件不是普通 Node 包:package.json 里的 engines.atom 字段、原生模块编译路径、postinstall 脚本(比如 linter-gcc 要生成绑定二进制)全靠 apm 解析和执行。npm install 完全无视这些,只装 dependencies 列表,装完也跑不起来。
-
Error: Cannot find module 'season'或'fs-plus'→ 缺基础依赖,npm install没装对,或没装 -
Failed to activate package 'linter-gcc'→ native 模块没编译,apm才知道该调哪个node-gyp和 Electron 头文件 - 插件显示“Installed”但功能全无 →
main字段指向的./lib/main.js根本不存在,源码没构建
必须用 apm install --production 的三个硬性条件
离线环境尤其关键,漏掉任一条件都会白忙活:
- 运行命令的机器,
apm --version输出必须和目标机atom --version完全一致(例如都是v1.69.0),否则生命周期钩子(如onDidStopChanging)直接 undefined - 必须加
--production:跳过devDependencies,避免在离线机上因缺 Python / 编译工具链卡死在gyp ERR! - 执行后进插件目录确认:
~/.atom/packages/linter-gcc/node_modules下真有gcc、atom-linter等子目录,不是空文件夹
哪些插件就算装对了也注定失败
不是所有插件都能靠拷 node_modules 解决。以下三类在断网时必然报 Failed to fetch https:// 或卡加载:
- 依赖实时 API 的:
autocomplete-atom-api(启动时拉 GitHub 文档)、platformio-ide(强制校验云端 toolchain) - 含动态下载逻辑的:
language-rust某些版本首次启用会 fetch rustc 语法定义;spell-check的词典包可能尝试下载 - 需要全局
apm运行时支持的:sync-settings本质是包装apm login和apm publish,离线机没连过服务器就初始化不了
装完不生效?先开控制台看 Console 报什么
别信 Settings 里“Installed”那个状态。打开开发者工具(Ctrl+Shift+I),切到 Console 标签页,重点盯:
-
Error: Cannot find module 'fs-plus'→ 插件根目录没package.json,或main字段指向的入口文件路径错(比如写成./src/main.js,但实际是./lib/main.js) -
Failed to activate package 'linter' because it depends on 'linter@^3.0.0'→ 核心框架没装,比如linter(作者 steelbrain)必须先装,再装linter-eslint - 空白或无反应 → 可能缺 UI 层,比如
linter-ui-default没装或没启用,错误根本画不出来
真正麻烦的不是命令怎么敲,而是每个插件的激活时机、依赖粒度、构建要求都不一样——autocomplete-python 靠 language-python 触发,go-plus 还得调外部 gopls 二进制。离线前最好先在联网机上跑通一次 apm install --production 并验证功能是否正常。

















