@flun/node-mobile-app 1.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Android /346/236/204/345/273/272/346/214/207/345/215/227.md" +348 -315
- package/CHANGELOG.md +103 -0
- package/README.md +450 -448
- package/mobileAppConfig.js +15 -5
- package/package.json +20 -19
- package/src/commands/build.js +1 -1
- package/src/commands/clean.js +1 -1
- package/src/commands/test.js +1 -1
- package/src/config.js +1 -3
- package/src/copy.js +58 -13
- package/src/fingerprint.js +3 -3
- package/src/generate.js +6 -4
- package/src/install.js +51 -14
- package/src/utils.js +34 -3
- package/template/App.tsx +3 -2
- package/template/package.json +18 -18
- package//350/207/252/345/256/232/344/271/211libnode/346/214/207/345/215/227.md +444 -446
- package/template/@types/nodejs-mobile-react-native/index.d.ts +0 -9
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [2.0.0] - 2026-09-23 16:30
|
|
4
|
+
|
|
5
|
+
> **这是一次 major 版本升级**。用户 API 未变,但底层依赖被整体替换,风险等级和官方 CJS 版本不是一个量级。
|
|
6
|
+
|
|
7
|
+
### 重大变更(Breaking)
|
|
8
|
+
|
|
9
|
+
- **更换底层 runtime**:`nodejs-mobile-react-native` → **`@flun/nodejs-mobile-react-native`**(flun fork)
|
|
10
|
+
- 内部全量 ESM 化
|
|
11
|
+
- `rn-bridge` 保持 CJS(改为 `index.cjs`),兼容 CJS / ESM 项目
|
|
12
|
+
- 依赖升级:`tar@^6` → `^7`、`glob@^10` → `^13`、`make-fetch-happen@^13` → `^16`
|
|
13
|
+
- 删除 `xcode` 依赖(RN 0.60 autolinking 前的遗留)
|
|
14
|
+
- `react-native` peer 标为 optional,避免重复安装
|
|
15
|
+
- **更换原生模块编译工具**:`nodejs-mobile-gyp` → **`@flun/nodejs-mobile-gyp`**(flun fork)
|
|
16
|
+
- 上游停更、依赖 `tar@6` / `glob@10` 触发 deprecated 与安全审计警告
|
|
17
|
+
- fork 后升级 `tar@^7`、`glob@^13`、`make-fetch-happen@^16`,0 vulnerabilities
|
|
18
|
+
- 支持 **Visual Studio 2026**(版本号 18,toolset `v145`)
|
|
19
|
+
- 强制走 **MSVC** 工具集(不再使用 ClangCL),关闭 LTO
|
|
20
|
+
- 避免 `MSB8020: 无法找到 ClangCL 的生成工具`
|
|
21
|
+
- 避免 `LNK1117: 选项"opt:lldltojobs=2"中的语法错误`
|
|
22
|
+
|
|
23
|
+
### 用户影响
|
|
24
|
+
|
|
25
|
+
**无需修改任何配置或代码**。`mobileAppConfig.js` 格式、`npx node-mobile-app test / build` 命令、生成的 APK 行为均不变。
|
|
26
|
+
|
|
27
|
+
但底层 runtime 换了维护主体,若升级后遇到问题,请优先在 `@flun/node-mobile-app` 仓库反馈。
|
|
28
|
+
|
|
29
|
+
### 新增
|
|
30
|
+
|
|
31
|
+
- **模板依赖版本自动同步**:`template/package.json` 里声明的依赖版本,由 CLI 在 `copyTemplate` 阶段自动从主包 `package.json` 的 `dependencies` 同步。
|
|
32
|
+
- 单一数据源:升级依赖只需改主包一处,模板自动跟上
|
|
33
|
+
- 缺声明会报错:模板里声明但主包未声明的依赖,构建时直接抛错中断,避免模板里的 `"*"` 占位值被误用
|
|
34
|
+
- 实现:`src/copy.js` 新增 `syncTemplateDependencies(pkgRoot, buildDir)`
|
|
35
|
+
- **原生模块自动检测**:CLI 自动判断用户项目依赖里是否含原生模块(带 `binding.gyp` 的包,如 `bcrypt`、`sqlite3`),决定是否编译原生代码。
|
|
36
|
+
- 移除配置字段 `android.buildNativeModules`——用户无需手动配置
|
|
37
|
+
- 检测范围:用户根 `package.json` 的 `dependencies` 里,逐个查 `userProjectDir/node_modules/<name>/binding.gyp`
|
|
38
|
+
- 检测结果纳入依赖哈希:装/卸原生模块自动触发重装重编
|
|
39
|
+
- 新增环境变量 `NODE_MOBILE_FORCE_REBUILD=1`:特殊场景(如换了 `libnode.so` 但依赖未变)下强制重装重编
|
|
40
|
+
- 平台限制:Windows 上 nodejs-mobile 无法编译原生模块(上游限制),此功能仅 Linux / macOS 可用
|
|
41
|
+
- 实现:`src/install.js` 的 `hasNativeModules`、`installUserDeps`、`hashDeps`
|
|
42
|
+
|
|
43
|
+
### 修复
|
|
44
|
+
|
|
45
|
+
- **主包 `main.js` 生成逻辑适配 rn-bridge**:`generate.js` 生成的 `main.js` 改用 `require('rn-bridge')`(配合 rn-bridge 的 `.cjs`),避免 `await import` 绕过 native binding 的 CJS loader 路径导致崩溃
|
|
46
|
+
- **`@flun/nodejs-mobile-react-native` 插件路径适配**:`src/install.js`、`src/fingerprint.js`、`src/commands/clean.js` 中对插件目录的探测,从 `node_modules/nodejs-mobile-react-native` 改为 `node_modules/@flun/nodejs-mobile-react-native`
|
|
47
|
+
- **模板依赖清理**:
|
|
48
|
+
- 删除 `template/package.json` 里冗余的 `react-native-safe-area-context`(模板代码零引用)
|
|
49
|
+
- 删除 `template/@types/nodejs-mobile-react-native/`(源包 `index.d.ts` 已覆盖,且 `package.json` 加了 `types` 字段指向它)
|
|
50
|
+
- 修正 `template/package.json` 里 `@flun/nodejs-mobile-react-native` 的版本号(旧值 `^18.20.4-flun.1` 在 npm 上不存在)
|
|
51
|
+
|
|
52
|
+
### 依赖调整
|
|
53
|
+
|
|
54
|
+
- `dependencies` 里的 `nodejs-mobile-react-native` 换成 `@flun/nodejs-mobile-react-native: ^1.0.1`
|
|
55
|
+
- 该 fork 内部再依赖 `@flun/nodejs-mobile-gyp: ^1.0.1`
|
|
56
|
+
- 依赖树彻底干净,`npm ls tar glob uuid` 无停更包,0 vulnerabilities
|
|
57
|
+
|
|
58
|
+
### 验证
|
|
59
|
+
|
|
60
|
+
- Windows + VS2026 BuildTools + Python 3.14 + Node 26.8.1 环境下:
|
|
61
|
+
- `npx node-mobile-app test` 全链路通过(Gradle 编译 + 部署到真机 + Metro 热更新)
|
|
62
|
+
- `npx node-mobile-app build` / `build --release` 生成 APK 正常
|
|
63
|
+
- App 启动正常,Node 服务正常监听端口
|
|
64
|
+
- 模板依赖版本自动同步经独立测试验证(改假版本号 → CLI 覆盖为真实版本)
|
|
65
|
+
- iOS:保留对 Node 18 的支持(未在 macOS 上实测)
|
|
66
|
+
### 文档同步
|
|
67
|
+
|
|
68
|
+
**预编译二进制改为自动下载**相关的文档改动:
|
|
69
|
+
|
|
70
|
+
- `README.md`:
|
|
71
|
+
- 新增 Q 段落「`libnode.so` 和 `NodeMobile.xcframework` 是怎么来的?」,说明 postinstall 自动下载机制、环境变量、失败处理
|
|
72
|
+
- 原「如何替换自定义的 `libnode.so`?」改为「如何替换成自定义编译的 `libnode.so`?」,明确适用于自编译 v22+ 场景
|
|
73
|
+
- `Android 构建指南.md`:
|
|
74
|
+
- 新增 2.0 章节「预编译二进制怎么来的」
|
|
75
|
+
- 2.1 标题从「默认随包带」改为「默认自动下载」
|
|
76
|
+
- `自定义libnode指南.md`:
|
|
77
|
+
- 章节二开头加提示:默认 v18 由 postinstall 自动下载,本节仅服务 v22+ 自编译场景
|
|
78
|
+
- **清理 `nodejs-assets/` 相关说明**:`@flun/nodejs-mobile-react-native` 1.0.1 起,宿主项目依赖 `@flun/node-mobile-app` 时不再复制 `nodejs-assets/`,因此:
|
|
79
|
+
- `README.md`:删除项目根目录树里的 `nodejs-assets/`、删除「两个 nodejs-assets 的区别」整段、删除 Q 段落「nodejs-assets 一直出现在你的项目根」
|
|
80
|
+
- `mobileAppConfig.js`:`excludeFiles` 里 `nodejs-assets/` 的注释改为「旧版插件残留;防止误打包」
|
|
81
|
+
- **原生模块自动检测**相关的文档改动:
|
|
82
|
+
- `README.md`:删除配置字段表里的 `buildNativeModules` 行
|
|
83
|
+
- `Android 构建指南.md`:1.4 章节从「原生模块编译开关(Windows)」改为「原生模块编译(自动检测)」,说明自动识别 `binding.gyp`、`NODE_MOBILE_FORCE_REBUILD` 手动强制、Windows 平台限制
|
|
84
|
+
- `自定义libnode指南.md`:2.6 章节从「重编原生模块(仅当用到 `bcrypt` 等)」改为「重编原生模块(仅当项目含原生模块)」,说明默认自动处理、手动触发方式;迁移清单与常见坑表格同步
|
|
85
|
+
|
|
86
|
+
背景:`@flun/nodejs-mobile-react-native` 1.0.1 起,`android-libnode.zip`(约 52 MB)与 `ios-nodemobile.zip`(约 47 MB)不再随 npm 包分发,改为 postinstall 阶段从 Gitee / GitHub Release 自动拉取。npm tarball 从 107 MB 降到 1.2 MB。
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## [1.0.2] - 2026-09-21 08:24
|
|
91
|
+
|
|
92
|
+
### 修复
|
|
93
|
+
- **依赖树瘦身**:删除主包里未使用的 6 个依赖(`@babel/preset-env`、`@babel/runtime`、`@react-native/jest-preset`、`@react-native/new-app-screen`、`@react-native/typescript-config`、`react-native-safe-area-context`),安装体积与安装耗时下降
|
|
94
|
+
- **消除旧依赖链**:移除 `@react-native/eslint-config`,改为内置自写 ESLint flat config(`src/utils.js` 的 `buildEslintConfigSource()`,构建时覆写到 `node-mobile-app-build/eslint.config.js`)。随之消失的旧包:`inflight@1.0.6`、`rimraf@3.0.2`、`glob@7.2.3`、`@humanwhocodes/config-array`、`@humanwhocodes/object-schema`
|
|
95
|
+
- **ESLint 升级到 9**:统一使用 `eslint@^9`,不再出现 eslint 8 / 9 两份并存
|
|
96
|
+
- **模板 lint 清理**:修复 `template/App.tsx` 中逗号表达式触发的 `@typescript-eslint/no-unused-expressions` 报错,模板现在默认 `npx eslint` 零 error 零 warning
|
|
97
|
+
|
|
98
|
+
### 文档
|
|
99
|
+
- `mobileAppConfig.js` 与 `README.md` 更正签名说明:`build --release` **不配置 `android.signing` 也能出包**,默认沿用模板自带的 debug keystore 签名(可安装、可本地测试,不可上架);需要上架时再填 `keystore` / `storePassword` / `keyAlias` / `keyPassword`
|
|
100
|
+
|
|
101
|
+
## [1.0.1] - 2026-09-20 11:52
|
|
102
|
+
### 首发
|
|
103
|
+
- 发布将 Node.js 项目一键打包为 Android / iOS 移动应用(基于 nodejs-mobile-react-native);
|