@flun/nodejs-mobile-gyp 1.2.0 → 1.2.2
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/CHANGELOG.md +30 -10
- package/LICENSE +33 -33
- package/README.md +62 -63
- package/bin/node-gyp.js +22 -24
- package/lib/Find-VisualStudio.cs +2 -1
- package/lib/build.js +25 -35
- package/lib/clean.js +2 -2
- package/lib/configure.js +25 -25
- package/lib/create-config-gypi.js +3 -3
- package/lib/find-node-directory.js +4 -4
- package/lib/find-python.js +44 -44
- package/lib/find-visualstudio.js +52 -52
- package/lib/install.js +41 -41
- package/lib/list.js +2 -2
- package/lib/node-gyp.js +22 -22
- package/lib/process-release.js +1 -1
- package/lib/rebuild.js +1 -1
- package/lib/remove.js +5 -5
- package/lib/util.js +5 -5
- package/package.json +11 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# 变更日志
|
|
2
2
|
|
|
3
|
+
## [1.2.2] - 2026-11-06 11:02
|
|
4
|
+
### 优化
|
|
5
|
+
- 细节优化;
|
|
6
|
+
|
|
7
|
+
## [1.2.1] - 2026-11-06 10:02
|
|
8
|
+
### 优化
|
|
9
|
+
- 帮助文本层级改为与其它作用域包一致:`用法:` 缩进 2,分组名缩进 4,各条目缩进 6;
|
|
10
|
+
分组名去掉行尾冒号,底部版本行缩进 2,与 `用法:` 行对齐;
|
|
11
|
+
- `usage()` 内原 `cmd` 与 `opt` 两个函数体完全相同,合并为单个 `row`;
|
|
12
|
+
- 用户可见的命令名、日志标签与错误消息统一改为中文,涉及 `bin/node-gyp.js`、
|
|
13
|
+
`lib/build.js`、`lib/configure.js`、`lib/create-config-gypi.js`、`lib/install.js`、
|
|
14
|
+
`lib/find-python.js`、`lib/find-visualstudio.js`、`lib/find-node-directory.js`、
|
|
15
|
+
`lib/clean.js`、`lib/list.js`、`lib/remove.js`、`lib/process-release.js`、`lib/util.js`;
|
|
16
|
+
- `--verbose`/`--silly` 下的诊断消息一并中文化;技术标识保留原文,如 `py -0p`、
|
|
17
|
+
`installVersion`、`node.lib`、`EACCES`、`SHASUMS256.txt`、`--nodedir`;
|
|
18
|
+
- 各命令的 `usage` 属性改为中文;命令名与参数名保留原文;
|
|
19
|
+
|
|
20
|
+
### 修复
|
|
21
|
+
- 主目录缺失时的错误消息此前仍为整句英文,且含拼写错误 `Overide`;现改为中文;
|
|
22
|
+
- `find-python.js` 的 `fail()` 提示与 `addLog` 诊断、`find-visualstudio.js` 的
|
|
23
|
+
`fail()` 提示与 `addLog` 诊断,此前为英文;现改为中文;
|
|
24
|
+
- `install.js` 中下载、解压、校验相关的英文错误消息改为中文;
|
|
25
|
+
- `package.json` 的 `files` 字段含 `gyp/LICENSE`,该文件在磁盘上不存在;现移除;
|
|
26
|
+
其余条目按磁盘实际顺序重排:目录在前,文件在后,否定项紧随其对应的目录;
|
|
27
|
+
|
|
28
|
+
### 文档
|
|
29
|
+
- README 的包目录结构同步磁盘实际内容:补 `gyp/pyproject.toml`、`gyp/README.md`、
|
|
30
|
+
`gyp/test_gyp.py`,移除不存在的 `gyp/LICENSE`;顶层文件按 `files` 顺序重排;
|
|
31
|
+
|
|
3
32
|
## [1.2.0] - 2026-11-02 16:05
|
|
4
33
|
### 新增
|
|
5
34
|
- 帮助文本重写为中文三层结构:`用法:` 为 0 级,`命令:`/`选项:` 缩进 2,各条目缩进 4;
|
|
@@ -19,13 +48,4 @@
|
|
|
19
48
|
此前未声明,从 npm 安装后缺少依赖会导致 `--help` 直接报错;
|
|
20
49
|
|
|
21
50
|
### 文档
|
|
22
|
-
- `lib/` 下 12 个 js 去除 BOM;`维护.md`、`package.json`、`lib/util.js` 换行符由 CRLF 改为 LF;
|
|
23
|
-
|
|
24
|
-
## [1.1.4] - 2026-10-24 09:20
|
|
25
|
-
### 优化
|
|
26
|
-
- 项目标点已改为以英文标点为主;
|
|
27
|
-
- 行宽改为以 123 为主,部分超宽表格改为了列表;
|
|
28
|
-
|
|
29
|
-
## [1.1.3] - 2026-10-20 13:55
|
|
30
|
-
### 修复
|
|
31
|
-
- 一些细节优化
|
|
51
|
+
- `lib/` 下 12 个 js 去除 BOM;`维护.md`、`package.json`、`lib/util.js` 换行符由 CRLF 改为 LF;
|
package/LICENSE
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
ISC 许可证 (ISC License)
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026, flun <open@flun.top>
|
|
4
|
-
|
|
5
|
-
特此免费授予任何获得本软件及相关文档文件("软件")副本的人,不受限制地处理本软件的权利,
|
|
6
|
-
包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,
|
|
7
|
-
并允许向其提供本软件的人这样做,但须满足以下条件:
|
|
8
|
-
|
|
9
|
-
上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中;
|
|
10
|
-
|
|
11
|
-
本软件按"原样"提供,不作任何形式的明示或暗示的保证,
|
|
12
|
-
包括但不限于适销性、特定用途的适用性和不侵权的保证;
|
|
13
|
-
在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其它交易而产生的
|
|
14
|
-
任何索赔、损害或其它责任负责,无论是合同之诉、侵权之诉还是其它行为之诉;
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
英文原文 (English Version)
|
|
19
|
-
|
|
20
|
-
ISC License
|
|
21
|
-
|
|
22
|
-
Copyright (c) 2026, flun <open@flun.top>
|
|
23
|
-
|
|
24
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
25
|
-
purpose with or without fee is hereby granted, provided that the above
|
|
26
|
-
copyright notice and this permission notice appear in all copies.
|
|
27
|
-
|
|
28
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
29
|
-
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
30
|
-
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
31
|
-
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
32
|
-
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
33
|
-
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
1
|
+
ISC 许可证 (ISC License)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, flun <open@flun.top>
|
|
4
|
+
|
|
5
|
+
特此免费授予任何获得本软件及相关文档文件("软件")副本的人,不受限制地处理本软件的权利,
|
|
6
|
+
包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,
|
|
7
|
+
并允许向其提供本软件的人这样做,但须满足以下条件:
|
|
8
|
+
|
|
9
|
+
上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中;
|
|
10
|
+
|
|
11
|
+
本软件按"原样"提供,不作任何形式的明示或暗示的保证,
|
|
12
|
+
包括但不限于适销性、特定用途的适用性和不侵权的保证;
|
|
13
|
+
在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其它交易而产生的
|
|
14
|
+
任何索赔、损害或其它责任负责,无论是合同之诉、侵权之诉还是其它行为之诉;
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
英文原文 (English Version)
|
|
19
|
+
|
|
20
|
+
ISC License
|
|
21
|
+
|
|
22
|
+
Copyright (c) 2026, flun <open@flun.top>
|
|
23
|
+
|
|
24
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
25
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
26
|
+
copyright notice and this permission notice appear in all copies.
|
|
27
|
+
|
|
28
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
29
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
30
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
31
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
32
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
33
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
34
34
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
CHANGED
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
|
|
11
11
|
宿主平台支持 **Windows** / **macOS** / **Linux**,各平台所需的环境与工具见 [安装前准备](#安装前准备);
|
|
12
12
|
|
|
13
|
-
[`@flun/nodejs-mobile-react-native`](https://www.npmjs.com/package/@flun/nodejs-mobile-react-native)
|
|
13
|
+
[`@flun/nodejs-mobile-react-native`](https://www.npmjs.com/package/@flun/nodejs-mobile-react-native)
|
|
14
14
|
在构建时会自动调用本包,无需手动安装;
|
|
15
15
|
|
|
16
|
-
本包是 [`nodejs-mobile-gyp`](https://github.com/nodejs-mobile/nodejs-mobile-gyp) 的 flun fork,后者又基于上游
|
|
16
|
+
本包是 [`nodejs-mobile-gyp`](https://github.com/nodejs-mobile/nodejs-mobile-gyp) 的 flun fork,后者又基于上游
|
|
17
17
|
[`node-gyp`](https://github.com/nodejs/node-gyp);
|
|
18
18
|
|
|
19
19
|
- GitHub:https://github.com/OpenFlun/nodejs-mobile-gyp
|
|
@@ -24,19 +24,19 @@
|
|
|
24
24
|
|
|
25
25
|
#### 代码风格
|
|
26
26
|
|
|
27
|
-
| 项 | 原版 | 本 fork
|
|
28
|
-
| -------- | ----------------------- |
|
|
27
|
+
| 项 | 原版 | 本 fork |
|
|
28
|
+
| -------- | ----------------------- | ------------------------------------------- |
|
|
29
29
|
| 模块系统 | CommonJS | **ESM**(`package.json` 的 `type: "module"`) |
|
|
30
|
-
| 导出方式 | 文件内 `module.exports` | **末尾统一 `export { ... }`**
|
|
30
|
+
| 导出方式 | 文件内 `module.exports` | **末尾统一 `export { ... }`** |
|
|
31
31
|
| 函数声明 | `async function xxx` | `const xxx = async () =>`(`class` 保留) |
|
|
32
|
-
| 注释 | 英文 | 中文
|
|
32
|
+
| 注释 | 英文 | 中文 |
|
|
33
33
|
|
|
34
34
|
#### 依赖升级
|
|
35
35
|
|
|
36
|
-
| 包 | 原版 | 本 fork | 原因
|
|
37
|
-
| ------------------- | ---------- | --------- |
|
|
36
|
+
| 包 | 原版 | 本 fork | 原因 |
|
|
37
|
+
| ------------------- | ---------- | --------- | ------------------------------------------- |
|
|
38
38
|
| `tar` | `^6.1.2` | `^7.5.22` | 上游 v6 停更,有安全公告 |
|
|
39
|
-
| `glob` | `^10.3.10` | `^13.0.6` | 上游 v10 停更
|
|
39
|
+
| `glob` | `^10.3.10` | `^13.0.6` | 上游 v10 停更 |
|
|
40
40
|
| `make-fetch-happen` | `^13.0.0` | `^16.0.1` | 连带升级 `cacache`,去掉 `tar@6` / `glob@10` |
|
|
41
41
|
|
|
42
42
|
升级后依赖树干净,`npm audit` 0 vulnerabilities;
|
|
@@ -80,10 +80,6 @@
|
|
|
80
80
|
│ └── util.js # 通用工具:execFile 包装、注册表读取、候选文件查找
|
|
81
81
|
│
|
|
82
82
|
├── gyp/ # 内置的 gyp 工具(Python)
|
|
83
|
-
│ ├── gyp # Python 启动脚本(Unix)
|
|
84
|
-
│ ├── gyp.bat # Python 启动脚本(Windows)
|
|
85
|
-
│ ├── gyp_main.py # gyp 主入口
|
|
86
|
-
│ ├── LICENSE # gyp 自身的许可证
|
|
87
83
|
│ ├── pylib/gyp/ # gyp 核心 Python 模块
|
|
88
84
|
│ │ ├── input.py # 解析 .gyp / .gypi 文件
|
|
89
85
|
│ │ ├── common.py # 通用工具
|
|
@@ -94,32 +90,35 @@
|
|
|
94
90
|
│ │ ├── win_tool.py # Windows 工具链
|
|
95
91
|
│ │ └── generator/ # 各类生成器后端(make / msvs / ninja / xcode / cmake ...)
|
|
96
92
|
│ ├── pylib/packaging/ # gyp 依赖的 Python packaging 库(vendored)
|
|
97
|
-
│
|
|
98
|
-
│
|
|
93
|
+
│ ├── data/win/
|
|
94
|
+
│ │ └── large-pdb-shim.cc # Windows 大 PDB 兼容编译单元
|
|
95
|
+
│ ├── gyp # Python 启动脚本(Unix)
|
|
96
|
+
│ ├── gyp_main.py # gyp 主入口
|
|
97
|
+
│ ├── gyp.bat # Python 启动脚本(Windows)
|
|
98
|
+
│ ├── pyproject.toml # gyp 自身构建元数据(不随包发布)
|
|
99
|
+
│ ├── README.md # gyp 上游说明(不随包发布)
|
|
100
|
+
│ └── test_gyp.py # gyp 自测脚本(不随包发布)
|
|
99
101
|
│
|
|
100
102
|
├── src/
|
|
101
103
|
│ └── win_delay_load_hook.cc # Windows 加载延迟钩子(编译进每个原生模块)
|
|
102
104
|
│
|
|
103
105
|
├── addon.gypi # 所有原生模块共用的 gyp 配置
|
|
104
|
-
├── package.json # type: module,bin 命令名为 nodejs-mobile-gyp
|
|
105
|
-
├── LICENSE # 本包许可证(ISC)
|
|
106
|
-
├── README.md # 本文件
|
|
107
106
|
├── CHANGELOG.md # 版本变更记录
|
|
108
|
-
├── .
|
|
109
|
-
├──
|
|
110
|
-
├── .
|
|
111
|
-
└──
|
|
107
|
+
├── README.md # 本文件
|
|
108
|
+
├── LICENSE # 本包许可证(ISC)
|
|
109
|
+
├── macOS_Catalina_acid_test.sh # macOS Catalina 兼容性验证脚本(仅本地开发,不随包发布)
|
|
110
|
+
└── package.json # type: module,bin 命令名为 nodejs-mobile-gyp
|
|
112
111
|
```
|
|
113
112
|
|
|
114
113
|
## 安装前准备
|
|
115
114
|
|
|
116
115
|
本包面向 **Android / iOS 交叉编译**,宿主平台支持情况:
|
|
117
116
|
|
|
118
|
-
| 宿主平台 | 目标:Android | 目标:iOS
|
|
119
|
-
| -------- |
|
|
120
|
-
| Windows | 完整支持
|
|
121
|
-
| macOS | 完整支持
|
|
122
|
-
| Linux | 完整支持
|
|
117
|
+
| 宿主平台 | 目标:Android | 目标:iOS |
|
|
118
|
+
| -------- | ------------ | -------- |
|
|
119
|
+
| Windows | 完整支持 | 需 macOS |
|
|
120
|
+
| macOS | 完整支持 | 完整支持 |
|
|
121
|
+
| Linux | 完整支持 | 需 macOS |
|
|
123
122
|
|
|
124
123
|
各平台所需的构建环境如下;
|
|
125
124
|
|
|
@@ -142,28 +141,28 @@
|
|
|
142
141
|
(`sh.exe`、`printf`、`xargs`、`sed`、`rm`、`mkdir` 等数十个命令),
|
|
143
142
|
GNU make 执行 Makefile 所依赖的 Unix 命令均由它提供;位置自动探测(见下方)
|
|
144
143
|
|
|
145
|
-
> **为什么需要 Git for Windows?** Android 原生模块通过 GNU make 构建,Makefile 中会调用 `printf`、`xargs`、`sed` 等 Unix
|
|
146
|
-
命令;这些命令并非 Windows 自带,GNU make 需要一个 POSIX 环境来执行它们;Git for Windows
|
|
147
|
-
自带**整套 MSYS2 POSIX 工具集**(`sh.exe`、`printf`、`xargs`、`sed`、`rm`、`mkdir` 等数十个命令),无需额外安装 MSYS2 或
|
|
144
|
+
> **为什么需要 Git for Windows?** Android 原生模块通过 GNU make 构建,Makefile 中会调用 `printf`、`xargs`、`sed` 等 Unix
|
|
145
|
+
命令;这些命令并非 Windows 自带,GNU make 需要一个 POSIX 环境来执行它们;Git for Windows
|
|
146
|
+
自带**整套 MSYS2 POSIX 工具集**(`sh.exe`、`printf`、`xargs`、`sed`、`rm`、`mkdir` 等数十个命令),无需额外安装 MSYS2 或
|
|
148
147
|
Cygwin;
|
|
149
148
|
|
|
150
149
|
### macOS
|
|
151
150
|
|
|
152
|
-
| 组件 | 要求
|
|
153
|
-
| ----------- |
|
|
154
|
-
| Node.js | 见 `engines.node`
|
|
155
|
-
| Python | 3.6+
|
|
151
|
+
| 组件 | 要求 |
|
|
152
|
+
| ----------- | ----------------------------- |
|
|
153
|
+
| Node.js | 见 `engines.node` |
|
|
154
|
+
| Python | 3.6+ |
|
|
156
155
|
| Xcode | 完整 Xcode(必须,CLT 单独不够) |
|
|
157
|
-
| Android NDK | 仅构建 Android 目标时需 23–27
|
|
156
|
+
| Android NDK | 仅构建 Android 目标时需 23–27 |
|
|
158
157
|
|
|
159
158
|
### Linux
|
|
160
159
|
|
|
161
|
-
| 组件 | 要求
|
|
162
|
-
| ----------- |
|
|
163
|
-
| Node.js | 见 `engines.node`
|
|
164
|
-
| Python | 3.6+
|
|
160
|
+
| 组件 | 要求 |
|
|
161
|
+
| ----------- | ---------------------------------------------------- |
|
|
162
|
+
| Node.js | 见 `engines.node` |
|
|
163
|
+
| Python | 3.6+ |
|
|
165
164
|
| 构建工具 | `make`、`g++`(`apt install build-essential python3`) |
|
|
166
|
-
| Android NDK | 仅构建 Android 目标时需 23–27
|
|
165
|
+
| Android NDK | 仅构建 Android 目标时需 23–27 |
|
|
167
166
|
|
|
168
167
|
### 自动探测(Windows)
|
|
169
168
|
|
|
@@ -184,10 +183,10 @@
|
|
|
184
183
|
3. `PATH` 中的 `git.exe` 反推 `../usr/bin`
|
|
185
184
|
4. 常见安装位置兜底
|
|
186
185
|
|
|
187
|
-
- **Android NDK**:由 `@flun/nodejs-mobile-react-native` 通过 `android.ndkDirectory` 定位,并注入 `make.exe`、`clang`
|
|
186
|
+
- **Android NDK**:由 `@flun/nodejs-mobile-react-native` 通过 `android.ndkDirectory` 定位,并注入 `make.exe`、`clang`
|
|
188
187
|
等工具路径;
|
|
189
188
|
|
|
190
|
-
> 本包不依赖任何随包分发的硬编码配置文件;上述探测均为运行时动态完成;仅 Visual Studio 的"版本号 → 版本年份 →
|
|
189
|
+
> 本包不依赖任何随包分发的硬编码配置文件;上述探测均为运行时动态完成;仅 Visual Studio 的"版本号 → 版本年份 →
|
|
191
190
|
toolset"对照表以常量形式内联在 `lib/find-visualstudio.js` 中--这类信息由微软固定发布,无枚举接口,且随 VS 版本发布而更新,
|
|
192
191
|
不适合做成外部资源;
|
|
193
192
|
|
|
@@ -202,7 +201,7 @@ npm i @flun/nodejs-mobile-gyp
|
|
|
202
201
|
|
|
203
202
|
[rn-pkg]: https://www.npmjs.com/package/@flun/nodejs-mobile-react-native
|
|
204
203
|
|
|
205
|
-
> **Node 版本要求**:本 fork 的依赖链(`make-fetch-happen`、`nopt`、`proc-log`、`which` 等)已升级到较新版本,要求比原版
|
|
204
|
+
> **Node 版本要求**:本 fork 的依赖链(`make-fetch-happen`、`nopt`、`proc-log`、`which` 等)已升级到较新版本,要求比原版
|
|
206
205
|
`nodejs-mobile-gyp` 更高的 Node;具体最低版本见 `package.json` 的 `engines.node` 字段;若你的项目仍在使用较旧的 Node,
|
|
207
206
|
请改用原版 `nodejs-mobile-gyp`;
|
|
208
207
|
|
|
@@ -237,16 +236,16 @@ npx @flun/nodejs-mobile-gyp <command> [options]
|
|
|
237
236
|
|
|
238
237
|
### 命令
|
|
239
238
|
|
|
240
|
-
| 命令
|
|
241
|
-
|
|
242
|
-
| `help`
|
|
243
|
-
| `build`
|
|
244
|
-
| `clean`
|
|
245
|
-
| `configure` | 为当前平台生成工程构建文件
|
|
246
|
-
| `rebuild`
|
|
247
|
-
| `install`
|
|
248
|
-
| `list`
|
|
249
|
-
| `remove`
|
|
239
|
+
| 命令 | 说明 |
|
|
240
|
+
| ----------- | ---------------------------------------- |
|
|
241
|
+
| `help` | 显示帮助 |
|
|
242
|
+
| `build` | 调用 `make` / `msbuild.exe` 编译原生模块 |
|
|
243
|
+
| `clean` | 删除 `build` 目录(若存在) |
|
|
244
|
+
| `configure` | 为当前平台生成工程构建文件 |
|
|
245
|
+
| `rebuild` | 依次执行 `clean` → `configure` → `build` |
|
|
246
|
+
| `install` | 为指定版本安装 Node.js 头文件 |
|
|
247
|
+
| `list` | 列出已安装的 Node.js 头文件版本 |
|
|
248
|
+
| `remove` | 删除指定版本的 Node.js 头文件 |
|
|
250
249
|
|
|
251
250
|
### 参数
|
|
252
251
|
|
|
@@ -320,25 +319,25 @@ npm config set [--global] devdir /tmp/.gyp
|
|
|
320
319
|
|
|
321
320
|
#### 1. 工具集与 LTO
|
|
322
321
|
|
|
323
|
-
原版默认走 ClangCL 工具集,且继承 Node 官方二进制的 LTO 配置;Node.js 24+ 官方二进制由 ClangCL + ThinLTO 编译,其
|
|
324
|
-
`common.gypi` 会在 `clang==1` 时把 MSBuild 工具集设为 `ClangCL`,并在 `enable_lto==true` / `enable_thin_lto==true`
|
|
322
|
+
原版默认走 ClangCL 工具集,且继承 Node 官方二进制的 LTO 配置;Node.js 24+ 官方二进制由 ClangCL + ThinLTO 编译,其
|
|
323
|
+
`common.gypi` 会在 `clang==1` 时把 MSBuild 工具集设为 `ClangCL`,并在 `enable_lto==true` / `enable_thin_lto==true`
|
|
325
324
|
时向链接器传入 `-flto=thin`、`/opt:lldltojobs` 等 Clang 专用参数;若用户本机没装 ClangCL,或用的是传统 MSVC 工具链,会报:
|
|
326
325
|
|
|
327
326
|
- `MSB8020: 无法找到 ClangCL 的生成工具`
|
|
328
327
|
- `LNK1117: 选项"opt:lldltojobs=2"中的语法错误`
|
|
329
328
|
|
|
330
|
-
本 fork 强制走 MSVC 工具集并关闭 LTO,避免上述报错;工具集版本从 `find-visualstudio` 的探测结果**动态获取**(`v140` / `v141`
|
|
329
|
+
本 fork 强制走 MSVC 工具集并关闭 LTO,避免上述报错;工具集版本从 `find-visualstudio` 的探测结果**动态获取**(`v140` / `v141`
|
|
331
330
|
/ `v142` / `v143` / `v145`...),不写死;
|
|
332
331
|
|
|
333
332
|
#### 2. GNU make 的 POSIX 环境
|
|
334
333
|
|
|
335
|
-
Android 原生模块通过 GNU make 构建,其 Makefile 会调用 `printf`、`xargs`、`sed` 等 Unix 命令;GNU make 需要一个 POSIX
|
|
336
|
-
shell(`sh.exe`)来执行它们;Windows 上若无,会直接报 `CreateProcess(NULL, printf ...) failed`;Git for Windows 自带整套 POSIX
|
|
334
|
+
Android 原生模块通过 GNU make 构建,其 Makefile 会调用 `printf`、`xargs`、`sed` 等 Unix 命令;GNU make 需要一个 POSIX
|
|
335
|
+
shell(`sh.exe`)来执行它们;Windows 上若无,会直接报 `CreateProcess(NULL, printf ...) failed`;Git for Windows 自带整套 POSIX
|
|
337
336
|
工具集;本 fork 会自动定位其 `usr/bin` 并前置到 PATH,详见 [安装前准备](#安装前准备) 的"自动探测(Windows)";
|
|
338
337
|
|
|
339
338
|
#### 3. 路径分隔符
|
|
340
339
|
|
|
341
|
-
gyp 生成的 Makefile 中,路径原本会带上 Windows 的反斜杠(如 `src\bufferutil.o`),导致 `sh` / `sed` / `make` 解析失败;本 fork
|
|
340
|
+
gyp 生成的 Makefile 中,路径原本会带上 Windows 的反斜杠(如 `src\bufferutil.o`),导致 `sh` / `sed` / `make` 解析失败;本 fork
|
|
342
341
|
在 gyp 的路径生成环节统一转成正斜杠;该改动在非 Windows 平台上是 no-op;
|
|
343
342
|
|
|
344
343
|
### 具体改动清单
|
|
@@ -373,7 +372,7 @@ gyp 生成的 Makefile 中,路径原本会带上 Windows 的反斜杠(如 `src\b
|
|
|
373
372
|
|
|
374
373
|
#### 兼容性与健壮性
|
|
375
374
|
|
|
376
|
-
- **`proc-log` 新版本兼容**:新版把日志级别函数与 `pause` / `resume` 挂在默认导出的 `log` 对象下;本 fork 已按此调整
|
|
375
|
+
- **`proc-log` 新版本兼容**:新版把日志级别函数与 `pause` / `resume` 挂在默认导出的 `log` 对象下;本 fork 已按此调整
|
|
377
376
|
`lib/log.js`,否则 `configure` 阶段会抛 `TypeError`;
|
|
378
377
|
- **弃用 API 清理**:`lib/process-release.js` 不再用 `url.resolve()` / `url.parse()`,改用 WHATWG `URL`,消除 `DEP0169` 警告;
|
|
379
378
|
- **依赖脚本放行**:`package.json` 显式声明 `allowScripts`,适配新版 npm 默认禁止依赖执行安装脚本的行为;
|
|
@@ -390,8 +389,8 @@ gyp 生成的 Makefile 中,路径原本会带上 Windows 的反斜杠(如 `src\b
|
|
|
390
389
|
`import procLog from 'proc-log'`,再把需要的函数从 default 里解构后统一导出;
|
|
391
390
|
|
|
392
391
|
4. **PowerShell 写文件会加 BOM**
|
|
393
|
-
`Set-Content -Encoding UTF8` 会写入 `\uFEFF`,导致 gyp 的 `eval()` 报
|
|
394
|
-
`SyntaxError: invalid non-printable character U+FEFF`;写 `binding.gyp` 等交给 Python eval 的文件时,用
|
|
392
|
+
`Set-Content -Encoding UTF8` 会写入 `\uFEFF`,导致 gyp 的 `eval()` 报
|
|
393
|
+
`SyntaxError: invalid non-printable character U+FEFF`;写 `binding.gyp` 等交给 Python eval 的文件时,用
|
|
395
394
|
`[System.IO.File]::WriteAllText` + `New-Object System.Text.UTF8Encoding $false`;
|
|
396
395
|
|
|
397
396
|
5. **ESM 不支持动态 `require('./' + command)`**
|
|
@@ -413,7 +412,7 @@ ISC
|
|
|
413
412
|
## 贡献
|
|
414
413
|
|
|
415
414
|
- 源码:[GitHub](https://github.com/OpenFlun/nodejs-mobile-gyp)
|
|
416
|
-
-
|
|
415
|
+
- 中国镜像:[gitee](https://gitee.com/OpenFlun/nodejs-mobile-gyp)
|
|
417
416
|
- 问题反馈:[Issues](https://github.com/OpenFlun/nodejs-mobile-gyp/issues)
|
|
418
417
|
- 上游:`nodejs-mobile-gyp` 与 `node-gyp`
|
|
419
418
|
|
package/bin/node-gyp.js
CHANGED
|
@@ -7,8 +7,7 @@ import chalk from 'chalk';
|
|
|
7
7
|
import { Gyp } from '../lib/node-gyp.js';
|
|
8
8
|
import * as log from '../lib/log.js';
|
|
9
9
|
|
|
10
|
-
process.title = '
|
|
11
|
-
|
|
10
|
+
process.title = 'nodejs-mobile-gyp';
|
|
12
11
|
/**
|
|
13
12
|
* 处理并执行选中的命令;
|
|
14
13
|
*/
|
|
@@ -20,28 +19,25 @@ prog.parseArgv(process.argv), prog.devDir = prog.opts.devdir;
|
|
|
20
19
|
if (prog.devDir) prog.devDir = prog.devDir.replace(/^~/, homeDir);
|
|
21
20
|
else if (homeDir) prog.devDir = envPaths('node-gyp', { suffix: '' }).cache;
|
|
22
21
|
else {
|
|
23
|
-
throw new Error(
|
|
24
|
-
|
|
25
|
-
'in either of the environmental variables HOME or USERPROFILE. ' +
|
|
26
|
-
'Overide with: --devdir /path/to/.node-gyp');
|
|
22
|
+
throw new Error('nodejs-mobile-gyp 需要指定用户主目录,请设置环境变量 HOME 或 USERPROFILE;'
|
|
23
|
+
+ '也可用 --devdir /path/to/.node-gyp 覆盖');
|
|
27
24
|
}
|
|
28
25
|
|
|
29
26
|
if (prog.todo.length === 0) {
|
|
30
|
-
const helpArgs = ['help', '-h', '--help'],
|
|
31
|
-
hasHelp = process.argv.some(a => helpArgs.includes(a)),
|
|
27
|
+
const helpArgs = ['help', '-h', '--help'], hasHelp = process.argv.some(a => helpArgs.includes(a)),
|
|
32
28
|
unknown = prog.argv.filter(a => !helpArgs.includes(a));
|
|
33
29
|
if (~process.argv.indexOf('-v') || ~process.argv.indexOf('--version')) log.stdout('v%s', prog.version);
|
|
34
30
|
else if (hasHelp || unknown.length === 0) log.stdout('%s', prog.usage());
|
|
35
31
|
else {
|
|
36
|
-
console.error(`${chalk.red('✗ 未知命令: ')}${chalk.yellow(unknown[0])}`), console.error('')
|
|
37
|
-
process.exit(1);
|
|
32
|
+
console.error(`${chalk.red('✗ 未知命令: ')}${chalk.yellow(unknown[0])}`), console.error('');
|
|
33
|
+
console.log(prog.usage()), process.exit(1);
|
|
38
34
|
}
|
|
39
35
|
process.exit(0);
|
|
40
36
|
}
|
|
41
37
|
|
|
42
|
-
log.info('
|
|
43
|
-
|
|
44
|
-
log.info('
|
|
38
|
+
log.info('以 ok 结尾即执行成功', 'ok'), log.verbose('cli', process.argv);
|
|
39
|
+
log.info('使用', 'nodejs-mobile-gyp@%s', prog.version);
|
|
40
|
+
log.info('使用', 'node@%s | %s | %s', process.versions.node, process.platform, process.arch);
|
|
45
41
|
|
|
46
42
|
/**
|
|
47
43
|
* 如果传了 -C/--directory,切换到该目录;
|
|
@@ -50,11 +46,11 @@ const dir = prog.opts.directory;
|
|
|
50
46
|
if (dir) {
|
|
51
47
|
try {
|
|
52
48
|
const stat = fs.statSync(dir);
|
|
53
|
-
if (stat.isDirectory()) log.info('
|
|
54
|
-
else log.warn('
|
|
49
|
+
if (stat.isDirectory()) log.info('切换目录', dir), process.chdir(dir);
|
|
50
|
+
else log.warn('切换目录', dir + ' 不是目录');
|
|
55
51
|
} catch (e) {
|
|
56
|
-
if (e.code === 'ENOENT') log.warn('
|
|
57
|
-
else log.warn('
|
|
52
|
+
if (e.code === 'ENOENT') log.warn('切换目录', dir + ' 不是目录');
|
|
53
|
+
else log.warn('切换目录', '切换目录失败 "%s"', e.message);
|
|
58
54
|
}
|
|
59
55
|
}
|
|
60
56
|
|
|
@@ -63,16 +59,18 @@ if (dir) {
|
|
|
63
59
|
*/
|
|
64
60
|
const errorMessage = () => {
|
|
65
61
|
// 复制自 npm 的 lib/utils/error-handler.js
|
|
66
|
-
log.error('
|
|
67
|
-
log.error('
|
|
68
|
-
log.error('node
|
|
62
|
+
log.error('系统', os.type() + ' ' + os.release());
|
|
63
|
+
log.error('命令', process.argv.map(JSON.stringify).join(' ')), log.error('工作目录', process.cwd());
|
|
64
|
+
log.error('node 版本', process.version), log.error('nodejs-mobile-gyp 版本', 'v' + prog.package.version);
|
|
69
65
|
},
|
|
70
66
|
/**
|
|
71
67
|
* 打印最终诊断信息
|
|
72
68
|
*/
|
|
73
69
|
issueMessage = () => {
|
|
74
70
|
errorMessage();
|
|
75
|
-
log.error('', [
|
|
71
|
+
log.error('', [
|
|
72
|
+
'nodejs-mobile-gyp 构建你的包失败!', '请尝试更新 npm 和/或 nodejs-mobile-gyp;若仍无法解决,请向作者反馈;'
|
|
73
|
+
].join('\n'));
|
|
76
74
|
},
|
|
77
75
|
/**
|
|
78
76
|
* 依次执行队列中的命令
|
|
@@ -90,12 +88,12 @@ const errorMessage = () => {
|
|
|
90
88
|
|
|
91
89
|
if (command.name === 'list') {
|
|
92
90
|
if (args.length) args.forEach((version) => log.stdout(version));
|
|
93
|
-
else log.stdout('尚未安装任何 Node 开发文件;可用 `
|
|
91
|
+
else log.stdout('尚未安装任何 Node 开发文件;可用 `nodejs-mobile-gyp install` 安装指定版本;')
|
|
94
92
|
}
|
|
95
93
|
else if (args.length >= 1) log.stdout(...args.slice(1))
|
|
96
94
|
return run(); // 继续执行队列中的下一条命令
|
|
97
95
|
} catch (err) {
|
|
98
|
-
log.error(command.name + '
|
|
96
|
+
log.error(command.name + ' 命令执行出错'), log.error('堆栈', err.stack), errorMessage(), log.error('not ok');
|
|
99
97
|
return process.exit(1);
|
|
100
98
|
}
|
|
101
99
|
};
|
|
@@ -104,7 +102,7 @@ process.on('exit', code => {
|
|
|
104
102
|
if (!completed && !code) log.error('完成回调未被调用!'), issueMessage(), process.exit(6);
|
|
105
103
|
});
|
|
106
104
|
process.on('uncaughtException', err => {
|
|
107
|
-
log.error('未捕获的异常'), log.error('
|
|
105
|
+
log.error('未捕获的异常'), log.error('堆栈', err.stack), issueMessage(), process.exit(7);
|
|
108
106
|
});
|
|
109
107
|
|
|
110
108
|
run(); // 开始执行给定命令!
|
package/lib/Find-VisualStudio.cs
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
// See accompanying file LICENSE at https://github.com/node4good/windows-autoconf
|
|
4
4
|
|
|
5
5
|
// Usage:
|
|
6
|
-
// powershell -ExecutionPolicy Unrestricted -Command "Add-Type -Path Find-VisualStudio.cs;
|
|
6
|
+
// powershell -ExecutionPolicy Unrestricted -Command "Add-Type -Path Find-VisualStudio.cs;
|
|
7
|
+
// [VisualStudioConfiguration.Main]::PrintJson()"
|
|
7
8
|
// This script needs to be compatible with PowerShell v2 to run on Windows 2008R2 and Windows 7.
|
|
8
9
|
|
|
9
10
|
using System;
|