@flun/node-mobile-app 4.0.8 → 4.0.9
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" +354 -354
- package/CHANGELOG.md +20 -14
- package/LICENSE +33 -33
- package/README.md +661 -652
- package/bin/cli.js +20 -15
- package/mobileAppConfig.js +165 -165
- package/package.json +8 -8
- package/src/commands/build.js +119 -119
- package/src/commands/test.js +169 -169
- package/src/config.js +112 -112
- package/src/copy.js +320 -320
- package/src/fingerprint.js +129 -129
- package/src/generate.js +103 -103
- package/src/install.js +327 -327
- package/src/optimize-node-modules.js +711 -711
- package/src/patcher.js +393 -393
- package/src/platform-ios.js +140 -140
- package/src/utils.js +280 -280
- package/template/android/gradle.properties +48 -48
- package/template/eslint.config.js +5 -5
- package/template/ios/MyApp/Info.plist +73 -73
- package//350/207/252/345/256/232/344/271/211libnode/346/214/207/345/215/227.md +477 -477
package/bin/cli.js
CHANGED
|
@@ -4,22 +4,26 @@ import { runBuild } from '../src/commands/build.js';
|
|
|
4
4
|
import { runClean } from '../src/commands/clean.js';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
|
|
7
|
-
const HELP =
|
|
8
|
-
@flun/node-mobile-app
|
|
7
|
+
const HELP = `用法: node-mobile-app <命令> [选项]
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
命令:
|
|
10
|
+
test 编译并安装到设备(走 Metro 热更新)
|
|
11
|
+
Android 默认,需 adb 可连的设备(真机或模拟器),默认配置 'arm64-v8a'(真机)
|
|
12
|
+
iOS 加 --ios,仅 macOS
|
|
13
|
+
build 打包
|
|
14
|
+
Android 默认 debug APK,离线可用;加 --release 打 release APK
|
|
15
|
+
iOS 加 --ios,仅 macOS,打 IPA;加 --release 用 Release 配置与 ad-hoc 导出
|
|
16
|
+
clean 清理构建缓存(不限平台)
|
|
17
17
|
|
|
18
|
-
选项:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
选项:
|
|
19
|
+
--ios 目标为 iOS;test 与 build 均可用,仅 macOS
|
|
20
|
+
--release 打 release 包;仅 build 可用,Android 与 iOS 均生效;
|
|
21
|
+
打包安卓包时,请根据使用场景配置签名(走默认/自签名/正式签名);
|
|
22
|
+
--device <id> 指定设备;仅 test
|
|
23
|
+
--arch <abi> 指定 ABI,逗号分隔;仅 build,Android
|
|
24
|
+
--debug 显示详细日志;所有命令通用
|
|
25
|
+
|
|
26
|
+
无参数、help、-h、--help 输出本帮助。`,
|
|
23
27
|
|
|
24
28
|
parseFlags = args => {
|
|
25
29
|
const f = {};
|
|
@@ -40,7 +44,8 @@ const HELP = `
|
|
|
40
44
|
if (cmd === 'test') await runTest(flags);
|
|
41
45
|
else if (cmd === 'build') await runBuild(flags);
|
|
42
46
|
else if (cmd === 'clean') await runClean(flags);
|
|
43
|
-
else { console.log(HELP); process.exit(
|
|
47
|
+
else if (!cmd || cmd === 'help' || cmd === '-h' || cmd === '--help') { console.log(HELP); process.exit(0); }
|
|
48
|
+
else { console.error(chalk.yellow(`✗ 未知命令: ${cmd}\n`)), console.log(HELP), process.exit(1); }
|
|
44
49
|
} catch (e) {
|
|
45
50
|
console.error(chalk.red('\n❌ ' + e.message));
|
|
46
51
|
if (process.env.DEBUG) console.error(chalk.red(e.stack));
|
package/mobileAppConfig.js
CHANGED
|
@@ -1,166 +1,166 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @flun/node-mobile-app 配置文件
|
|
3
|
-
* 放置在用户 Node.js 项目根目录,CLI 会自动读取
|
|
4
|
-
* 如不提供此文件,CLI 使用默认配置
|
|
5
|
-
* 所有路径相对于用户项目根目录
|
|
6
|
-
*
|
|
7
|
-
* ===== 常用命令 =====
|
|
8
|
-
* npx node-mobile-app test 编译并安装到设备(需连 USB,走 Metro 热更新)
|
|
9
|
-
* npx node-mobile-app test --ios iOS 版(仅 macOS)
|
|
10
|
-
* npx node-mobile-app build 打 debug APK(离线可用)
|
|
11
|
-
* npx node-mobile-app build --release 打 release APK(默认 debug keystore 签名,可安装;上架需配 android.signing)
|
|
12
|
-
* npx node-mobile-app build --ios 打 IPA(仅 macOS)
|
|
13
|
-
* npx node-mobile-app clean 清理构建缓存
|
|
14
|
-
*
|
|
15
|
-
* 任意命令加 --debug 可显示详细日志(优化各阶段明细、各命令完整输出)
|
|
16
|
-
*
|
|
17
|
-
* ===== 服务地址说明 =====
|
|
18
|
-
* CLI 会自动识别 server.js 实际监听的协议和端口(拦截 listen 调用),
|
|
19
|
-
* App 使用该地址加载页面,无需在此配置;
|
|
20
|
-
* 若 5 秒内未能识别,App 显示启动失败并可在页面展开详情查看原因;
|
|
21
|
-
* 动态端口(listen(0))会自动获取系统分配的真实端口;
|
|
22
|
-
*/
|
|
23
|
-
export default {
|
|
24
|
-
// ===== 必填 =====
|
|
25
|
-
serverPath: './server.js', // Node.js 启动脚本路径
|
|
26
|
-
|
|
27
|
-
// ===== 应用信息 =====
|
|
28
|
-
appName: null, // 应用显示名称(默认从 package.json 的 name 读取)
|
|
29
|
-
outputDir: null, // APK 输出目录(默认 ./out,相对于用户项目根)
|
|
30
|
-
appId: 'com.example.app', // 应用唯一标识(反向域名格式,Android/iOS 通用)
|
|
31
|
-
versionCode: 1, // 内部版本号(整数,Android versionCode / iOS CFBundleVersion,每次发版递增)
|
|
32
|
-
versionName: '1.0.0', // 用户可见版本名(Android versionName / iOS CFBundleShortVersionString)
|
|
33
|
-
|
|
34
|
-
// ===== WebView 配置 =====
|
|
35
|
-
webview: {
|
|
36
|
-
showLoading: true, // 是否显示加载指示器
|
|
37
|
-
loadingText: '正在启动服务...', // 加载提示文字
|
|
38
|
-
enableJavaScript: true, // 是否启用 JavaScript
|
|
39
|
-
enableDomStorage: true, // 是否启用 DOM Storage(localStorage 等)
|
|
40
|
-
allowFileAccess: true, // 是否允许访问本地文件
|
|
41
|
-
mixedContentMode: 'always', // 混合内容模式:never / always / compatibility
|
|
42
|
-
// WebView 背景色,支持三种写法:
|
|
43
|
-
// '#ffffff' / 'white' 固定色
|
|
44
|
-
// 'system' 跟随系统(内部用默认浅/深色)
|
|
45
|
-
// { light: '#fff', dark: '#1a1a1a' } 按系统主题切换
|
|
46
|
-
backgroundColor: '#ffffff',
|
|
47
|
-
// 仅影响 HTTPS 场景下 App 是否加载自签证书的页面:
|
|
48
|
-
// - 用 HTTP:与本开关无关
|
|
49
|
-
// - 用 HTTPS + 真证书(如 Let's Encrypt):与本开关无关
|
|
50
|
-
// - 用 HTTPS + 自签证书 + 已装进设备信任库:与本开关无关
|
|
51
|
-
// - 用 HTTPS + 自签证书 + 未装设备(本地测试最常见):必须设为 true
|
|
52
|
-
// ⚠️ 开启后仅对 127.0.0.1 / localhost 放行不受信任的 HTTPS 证书,其他域名仍严格校验
|
|
53
|
-
// 用于本地自签证书测试,生产环境建议关闭
|
|
54
|
-
allowSelfSignedCert: false,
|
|
55
|
-
},
|
|
56
|
-
|
|
57
|
-
// ===== Android 平台配置 =====
|
|
58
|
-
android: {
|
|
59
|
-
sdkPath: null, // Android SDK 路径(默认自动查找)
|
|
60
|
-
adbPath: null, // adb.exe 路径(默认自动查找)
|
|
61
|
-
minSdkVersion: 29, // 最低 SDK(29=Android 10.0)
|
|
62
|
-
targetSdkVersion: 36, // 目标 SDK
|
|
63
|
-
compileSdkVersion: 37, // 编译 SDK
|
|
64
|
-
buildToolsVersion: '37.0.0', // 构建工具版本
|
|
65
|
-
abiFilters: ['arm64-v8a'], // 打包架构(真机用 arm64-v8a, 模拟器加 x86_64)
|
|
66
|
-
icon: './build/icon.png', // 应用图标(建议 512x512 PNG)
|
|
67
|
-
usesCleartextTraffic: true, // 是否允许明文流量(http)
|
|
68
|
-
permissions: [ // 额外权限(按需添加)
|
|
69
|
-
// 'android.permission.INTERNET', // INTERNET 始终包含,不需配置
|
|
70
|
-
// 'android.permission.ACCESS_NETWORK_STATE',
|
|
71
|
-
// 'android.permission.CAMERA',
|
|
72
|
-
// 'android.permission.READ_EXTERNAL_STORAGE',
|
|
73
|
-
],
|
|
74
|
-
// 签名配置(可选)
|
|
75
|
-
//
|
|
76
|
-
// 不配置也能打 release:模板默认用 debug keystore 签名(可安装、可本地测试,不可上架);
|
|
77
|
-
// 需要上架时再配置下面任一种:
|
|
78
|
-
//
|
|
79
|
-
// 方式一:Android SDK 自带 debug keystore(本地测试常用)
|
|
80
|
-
// keystore: %USERPROFILE%\.android\debug.keystore (Windows)
|
|
81
|
-
// ~/.android/debug.keystore (macOS/Linux)
|
|
82
|
-
// storePassword: 'android'
|
|
83
|
-
// keyAlias: 'androiddebugkey'
|
|
84
|
-
// keyPassword: 'android'
|
|
85
|
-
//
|
|
86
|
-
// 取消下方整块注释即视为"启用签名",此时 4 项均为必填(缺项会在构建前报错)
|
|
87
|
-
signing: {
|
|
88
|
-
// keystore: './build/release.keystore', // 必填:keystore 路径(相对用户项目根)
|
|
89
|
-
// storePassword: '', // 必填:keystore 密码
|
|
90
|
-
// keyAlias: '', // 必填:密钥别名
|
|
91
|
-
// keyPassword: '', // 必填:密钥密码(与 storePassword 相同可填同值)
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
|
|
95
|
-
// ===== iOS 平台配置 =====
|
|
96
|
-
// 说明: 当前仅支持 Node 18;Node 18+ 需自行适配 libnode.so
|
|
97
|
-
ios: {
|
|
98
|
-
deploymentTarget: '15.1', // 最低 iOS 版本(RN 0.87 要求 15.1+)
|
|
99
|
-
icon: './build/icon.png', // 应用图标(建议 1024x1024 PNG)
|
|
100
|
-
// 签名配置(仅 macOS,发布时必填):
|
|
101
|
-
// teamId Apple Developer Team ID
|
|
102
|
-
// provisioningProfile 描述文件路径(写入 exportOptions.plist)
|
|
103
|
-
// certificate P12 证书路径(导入临时 keychain 供 xcodebuild 签名用)
|
|
104
|
-
// certificatePassword P12 密码
|
|
105
|
-
signing: {
|
|
106
|
-
// teamId: '',
|
|
107
|
-
// provisioningProfile: './build/profile.mobileprovision',
|
|
108
|
-
// certificate: './build/cert.p12',
|
|
109
|
-
// certificatePassword: '',
|
|
110
|
-
},
|
|
111
|
-
},
|
|
112
|
-
|
|
113
|
-
// ===== 高级选项 =====
|
|
114
|
-
advanced: {
|
|
115
|
-
keepAlive: true, // 是否发送心跳保持 Node.js 进程活跃
|
|
116
|
-
heartbeatInterval: 5000, // 心跳间隔(毫秒)
|
|
117
|
-
},
|
|
118
|
-
|
|
119
|
-
// ===== node_modules 优化 =====
|
|
120
|
-
// 构建时合并 JS + 清空已复制到项目根的资源 + 清平台二进制 + 清开发文件,加速启动
|
|
121
|
-
// 默认开启;若构建或运行异常,可按下述方式关闭或排除问题包
|
|
122
|
-
optimize: {
|
|
123
|
-
enabled: true, // 是否启用(默认 true)
|
|
124
|
-
// exclude: ['包名'], // 排除优化时异常或不想优化的包(默认空)
|
|
125
|
-
},
|
|
126
|
-
|
|
127
|
-
// ===== 扩展点 =====
|
|
128
|
-
// 不重置的模板文件(路径相对于 node-mobile-app-build/,如 'android/app/src/main/AndroidManifest.xml')
|
|
129
|
-
keepFiles: [],
|
|
130
|
-
// 额外 RN 原生依赖包名数组(用于 autolink 识别,含原生模块的包必须在此声明)
|
|
131
|
-
// 安装命令用 --save-dev,这些是开发依赖,不会进移动端 Node 环境
|
|
132
|
-
// 示例: npm install --save-dev react-native-camera
|
|
133
|
-
// extraRnDependencies: ['react-native-camera']
|
|
134
|
-
// 未安装的包会在 test/build 时中断并提示安装命令
|
|
135
|
-
extraRnDependencies: [],
|
|
136
|
-
|
|
137
|
-
// ===== 排除文件/目录(复制到壳工程时排除) =====
|
|
138
|
-
excludeFiles: [
|
|
139
|
-
'.git/',
|
|
140
|
-
'.vscode/',
|
|
141
|
-
'.idea/',
|
|
142
|
-
'.vs/',
|
|
143
|
-
'node_modules/', // 如需保留请删除此行
|
|
144
|
-
'sessions/',
|
|
145
|
-
'users.json',
|
|
146
|
-
'.env',
|
|
147
|
-
'*.log',
|
|
148
|
-
'*.md',
|
|
149
|
-
'*.tgz',
|
|
150
|
-
'*.bak',
|
|
151
|
-
'.backup*',
|
|
152
|
-
'dist/',
|
|
153
|
-
'out/',
|
|
154
|
-
'build/',
|
|
155
|
-
'tests/',
|
|
156
|
-
'./mobileAppConfig.js' // 配置文件本身不打包
|
|
157
|
-
],
|
|
158
|
-
|
|
159
|
-
// ===== 允许执行安装脚本的包 =====
|
|
160
|
-
allowScripts: {
|
|
161
|
-
'node': true,
|
|
162
|
-
'unrs-resolver': true,
|
|
163
|
-
'@parcel/watcher': true,
|
|
164
|
-
'bcrypt': true,
|
|
165
|
-
},
|
|
1
|
+
/**
|
|
2
|
+
* @flun/node-mobile-app 配置文件
|
|
3
|
+
* 放置在用户 Node.js 项目根目录,CLI 会自动读取
|
|
4
|
+
* 如不提供此文件,CLI 使用默认配置
|
|
5
|
+
* 所有路径相对于用户项目根目录
|
|
6
|
+
*
|
|
7
|
+
* ===== 常用命令 =====
|
|
8
|
+
* npx node-mobile-app test 编译并安装到设备(需连 USB,走 Metro 热更新)
|
|
9
|
+
* npx node-mobile-app test --ios iOS 版(仅 macOS)
|
|
10
|
+
* npx node-mobile-app build 打 debug APK(离线可用)
|
|
11
|
+
* npx node-mobile-app build --release 打 release APK(默认 debug keystore 签名,可安装;上架需配 android.signing)
|
|
12
|
+
* npx node-mobile-app build --ios 打 IPA(仅 macOS)
|
|
13
|
+
* npx node-mobile-app clean 清理构建缓存
|
|
14
|
+
*
|
|
15
|
+
* 任意命令加 --debug 可显示详细日志(优化各阶段明细、各命令完整输出)
|
|
16
|
+
*
|
|
17
|
+
* ===== 服务地址说明 =====
|
|
18
|
+
* CLI 会自动识别 server.js 实际监听的协议和端口(拦截 listen 调用),
|
|
19
|
+
* App 使用该地址加载页面,无需在此配置;
|
|
20
|
+
* 若 5 秒内未能识别,App 显示启动失败并可在页面展开详情查看原因;
|
|
21
|
+
* 动态端口(listen(0))会自动获取系统分配的真实端口;
|
|
22
|
+
*/
|
|
23
|
+
export default {
|
|
24
|
+
// ===== 必填 =====
|
|
25
|
+
serverPath: './server.js', // Node.js 启动脚本路径
|
|
26
|
+
|
|
27
|
+
// ===== 应用信息 =====
|
|
28
|
+
appName: null, // 应用显示名称(默认从 package.json 的 name 读取)
|
|
29
|
+
outputDir: null, // APK 输出目录(默认 ./out,相对于用户项目根)
|
|
30
|
+
appId: 'com.example.app', // 应用唯一标识(反向域名格式,Android/iOS 通用)
|
|
31
|
+
versionCode: 1, // 内部版本号(整数,Android versionCode / iOS CFBundleVersion,每次发版递增)
|
|
32
|
+
versionName: '1.0.0', // 用户可见版本名(Android versionName / iOS CFBundleShortVersionString)
|
|
33
|
+
|
|
34
|
+
// ===== WebView 配置 =====
|
|
35
|
+
webview: {
|
|
36
|
+
showLoading: true, // 是否显示加载指示器
|
|
37
|
+
loadingText: '正在启动服务...', // 加载提示文字
|
|
38
|
+
enableJavaScript: true, // 是否启用 JavaScript
|
|
39
|
+
enableDomStorage: true, // 是否启用 DOM Storage(localStorage 等)
|
|
40
|
+
allowFileAccess: true, // 是否允许访问本地文件
|
|
41
|
+
mixedContentMode: 'always', // 混合内容模式:never / always / compatibility
|
|
42
|
+
// WebView 背景色,支持三种写法:
|
|
43
|
+
// '#ffffff' / 'white' 固定色
|
|
44
|
+
// 'system' 跟随系统(内部用默认浅/深色)
|
|
45
|
+
// { light: '#fff', dark: '#1a1a1a' } 按系统主题切换
|
|
46
|
+
backgroundColor: '#ffffff',
|
|
47
|
+
// 仅影响 HTTPS 场景下 App 是否加载自签证书的页面:
|
|
48
|
+
// - 用 HTTP:与本开关无关
|
|
49
|
+
// - 用 HTTPS + 真证书(如 Let's Encrypt):与本开关无关
|
|
50
|
+
// - 用 HTTPS + 自签证书 + 已装进设备信任库:与本开关无关
|
|
51
|
+
// - 用 HTTPS + 自签证书 + 未装设备(本地测试最常见):必须设为 true
|
|
52
|
+
// ⚠️ 开启后仅对 127.0.0.1 / localhost 放行不受信任的 HTTPS 证书,其他域名仍严格校验
|
|
53
|
+
// 用于本地自签证书测试,生产环境建议关闭
|
|
54
|
+
allowSelfSignedCert: false,
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
// ===== Android 平台配置 =====
|
|
58
|
+
android: {
|
|
59
|
+
sdkPath: null, // Android SDK 路径(默认自动查找)
|
|
60
|
+
adbPath: null, // adb.exe 路径(默认自动查找)
|
|
61
|
+
minSdkVersion: 29, // 最低 SDK(29=Android 10.0)
|
|
62
|
+
targetSdkVersion: 36, // 目标 SDK
|
|
63
|
+
compileSdkVersion: 37, // 编译 SDK
|
|
64
|
+
buildToolsVersion: '37.0.0', // 构建工具版本
|
|
65
|
+
abiFilters: ['arm64-v8a'], // 打包架构(真机用 arm64-v8a, 模拟器加 x86_64)
|
|
66
|
+
icon: './build/icon.png', // 应用图标(建议 512x512 PNG)
|
|
67
|
+
usesCleartextTraffic: true, // 是否允许明文流量(http)
|
|
68
|
+
permissions: [ // 额外权限(按需添加)
|
|
69
|
+
// 'android.permission.INTERNET', // INTERNET 始终包含,不需配置
|
|
70
|
+
// 'android.permission.ACCESS_NETWORK_STATE',
|
|
71
|
+
// 'android.permission.CAMERA',
|
|
72
|
+
// 'android.permission.READ_EXTERNAL_STORAGE',
|
|
73
|
+
],
|
|
74
|
+
// 签名配置(可选)
|
|
75
|
+
//
|
|
76
|
+
// 不配置也能打 release:模板默认用 debug keystore 签名(可安装、可本地测试,不可上架);
|
|
77
|
+
// 需要上架时再配置下面任一种:
|
|
78
|
+
//
|
|
79
|
+
// 方式一:Android SDK 自带 debug keystore(本地测试常用)
|
|
80
|
+
// keystore: %USERPROFILE%\.android\debug.keystore (Windows)
|
|
81
|
+
// ~/.android/debug.keystore (macOS/Linux)
|
|
82
|
+
// storePassword: 'android'
|
|
83
|
+
// keyAlias: 'androiddebugkey'
|
|
84
|
+
// keyPassword: 'android'
|
|
85
|
+
//
|
|
86
|
+
// 取消下方整块注释即视为"启用签名",此时 4 项均为必填(缺项会在构建前报错)
|
|
87
|
+
signing: {
|
|
88
|
+
// keystore: './build/release.keystore', // 必填:keystore 路径(相对用户项目根)
|
|
89
|
+
// storePassword: '', // 必填:keystore 密码
|
|
90
|
+
// keyAlias: '', // 必填:密钥别名
|
|
91
|
+
// keyPassword: '', // 必填:密钥密码(与 storePassword 相同可填同值)
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
// ===== iOS 平台配置 =====
|
|
96
|
+
// 说明: 当前仅支持 Node 18;Node 18+ 需自行适配 libnode.so
|
|
97
|
+
ios: {
|
|
98
|
+
deploymentTarget: '15.1', // 最低 iOS 版本(RN 0.87 要求 15.1+)
|
|
99
|
+
icon: './build/icon.png', // 应用图标(建议 1024x1024 PNG)
|
|
100
|
+
// 签名配置(仅 macOS,发布时必填):
|
|
101
|
+
// teamId Apple Developer Team ID
|
|
102
|
+
// provisioningProfile 描述文件路径(写入 exportOptions.plist)
|
|
103
|
+
// certificate P12 证书路径(导入临时 keychain 供 xcodebuild 签名用)
|
|
104
|
+
// certificatePassword P12 密码
|
|
105
|
+
signing: {
|
|
106
|
+
// teamId: '',
|
|
107
|
+
// provisioningProfile: './build/profile.mobileprovision',
|
|
108
|
+
// certificate: './build/cert.p12',
|
|
109
|
+
// certificatePassword: '',
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
// ===== 高级选项 =====
|
|
114
|
+
advanced: {
|
|
115
|
+
keepAlive: true, // 是否发送心跳保持 Node.js 进程活跃
|
|
116
|
+
heartbeatInterval: 5000, // 心跳间隔(毫秒)
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
// ===== node_modules 优化 =====
|
|
120
|
+
// 构建时合并 JS + 清空已复制到项目根的资源 + 清平台二进制 + 清开发文件,加速启动
|
|
121
|
+
// 默认开启;若构建或运行异常,可按下述方式关闭或排除问题包
|
|
122
|
+
optimize: {
|
|
123
|
+
enabled: true, // 是否启用(默认 true)
|
|
124
|
+
// exclude: ['包名'], // 排除优化时异常或不想优化的包(默认空)
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
// ===== 扩展点 =====
|
|
128
|
+
// 不重置的模板文件(路径相对于 node-mobile-app-build/,如 'android/app/src/main/AndroidManifest.xml')
|
|
129
|
+
keepFiles: [],
|
|
130
|
+
// 额外 RN 原生依赖包名数组(用于 autolink 识别,含原生模块的包必须在此声明)
|
|
131
|
+
// 安装命令用 --save-dev,这些是开发依赖,不会进移动端 Node 环境
|
|
132
|
+
// 示例: npm install --save-dev react-native-camera
|
|
133
|
+
// extraRnDependencies: ['react-native-camera']
|
|
134
|
+
// 未安装的包会在 test/build 时中断并提示安装命令
|
|
135
|
+
extraRnDependencies: [],
|
|
136
|
+
|
|
137
|
+
// ===== 排除文件/目录(复制到壳工程时排除) =====
|
|
138
|
+
excludeFiles: [
|
|
139
|
+
'.git/',
|
|
140
|
+
'.vscode/',
|
|
141
|
+
'.idea/',
|
|
142
|
+
'.vs/',
|
|
143
|
+
'node_modules/', // 如需保留请删除此行
|
|
144
|
+
'sessions/',
|
|
145
|
+
'users.json',
|
|
146
|
+
'.env',
|
|
147
|
+
'*.log',
|
|
148
|
+
'*.md',
|
|
149
|
+
'*.tgz',
|
|
150
|
+
'*.bak',
|
|
151
|
+
'.backup*',
|
|
152
|
+
'dist/',
|
|
153
|
+
'out/',
|
|
154
|
+
'build/',
|
|
155
|
+
'tests/',
|
|
156
|
+
'./mobileAppConfig.js' // 配置文件本身不打包
|
|
157
|
+
],
|
|
158
|
+
|
|
159
|
+
// ===== 允许执行安装脚本的包 =====
|
|
160
|
+
allowScripts: {
|
|
161
|
+
'node': true,
|
|
162
|
+
'unrs-resolver': true,
|
|
163
|
+
'@parcel/watcher': true,
|
|
164
|
+
'bcrypt': true,
|
|
165
|
+
},
|
|
166
166
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flun/node-mobile-app",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.9",
|
|
4
4
|
"description": "将 Node.js 项目一键打包为 Android / iOS 移动应用,运行时由 @flun/nodejs-mobile-react-native 提供;",
|
|
5
5
|
"author": "flun <open@flun.top>",
|
|
6
6
|
"keywords": [
|
|
@@ -40,28 +40,28 @@
|
|
|
40
40
|
"postinstall": "node scripts/copy-files.js"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@babel/core": "^8.0.
|
|
43
|
+
"@babel/core": "^8.0.10",
|
|
44
44
|
"@eslint-react/eslint-plugin": "^5.28.8",
|
|
45
45
|
"@eslint/js": "^10.0.1",
|
|
46
46
|
"@flun/nodejs-mobile-react-native": "^2.1.1",
|
|
47
|
-
"@react-native/babel-preset": "^0.88.
|
|
48
|
-
"@react-native/metro-config": "^0.88.
|
|
47
|
+
"@react-native/babel-preset": "^0.88.1",
|
|
48
|
+
"@react-native/metro-config": "^0.88.1",
|
|
49
49
|
"@react-native-community/cli": "^20.2.0",
|
|
50
50
|
"@react-native-community/cli-platform-android": "^20.2.0",
|
|
51
51
|
"@react-native-community/cli-platform-ios": "^20.2.0",
|
|
52
52
|
"@types/react": "^19.3.0",
|
|
53
|
-
"@typescript-eslint/eslint-plugin": "^8.72.
|
|
54
|
-
"@typescript-eslint/parser": "^8.72.
|
|
53
|
+
"@typescript-eslint/eslint-plugin": "^8.72.1",
|
|
54
|
+
"@typescript-eslint/parser": "^8.72.1",
|
|
55
55
|
"chalk": "^6.0.1",
|
|
56
56
|
"esbuild": "^0.28.2",
|
|
57
|
-
"eslint": "^10.
|
|
57
|
+
"eslint": "^10.14.0",
|
|
58
58
|
"eslint-config-prettier": "^10.1.8",
|
|
59
59
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
60
60
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
61
61
|
"jimp": "^1.6.1",
|
|
62
62
|
"prettier": "^3.9.10",
|
|
63
63
|
"react": "^19.3.1",
|
|
64
|
-
"react-native": "^0.88.
|
|
64
|
+
"react-native": "^0.88.1",
|
|
65
65
|
"react-native-webview": "^14.0.1"
|
|
66
66
|
},
|
|
67
67
|
"allowScripts": {
|