react-native-update-cli 1.26.0 → 1.27.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/cli.json CHANGED
@@ -34,20 +34,8 @@
34
34
  }
35
35
  },
36
36
 
37
- "uploadIpa": {
38
- "options": {
39
- "note": {
40
- "hasValue": true
41
- }
42
- }
43
- },
44
- "uploadApk": {
45
- "options": {
46
- "note": {
47
- "hasValue": true
48
- }
49
- }
50
- },
37
+ "uploadIpa": {},
38
+ "uploadApk": {},
51
39
  "parseIpa": {},
52
40
  "parseApk": {},
53
41
  "packages": {
@@ -96,6 +84,12 @@
96
84
 
97
85
  "packageVersion": {
98
86
  "hasValue": true
87
+ },
88
+ "minPackageVersion": {
89
+ "hasValue": true
90
+ },
91
+ "maxPackageVersion": {
92
+ "hasValue": true
99
93
  }
100
94
  }
101
95
  },
package/lib/api.js CHANGED
@@ -46,7 +46,7 @@ var _utils = require('./utils');
46
46
 
47
47
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
48
48
 
49
- const defaultEndpoint = 'https://update.react-native.cn/api';
49
+ const defaultEndpoint = 'https://update.reactnative.cn/api';
50
50
  let host = process.env.PUSHY_REGISTRY || defaultEndpoint;
51
51
 
52
52
 
package/lib/bundle.js CHANGED
@@ -51,7 +51,7 @@ async function runReactNativeBundleCommand(bundleName, development, entryFile, o
51
51
  if (platform === 'android') {
52
52
  gradleConfig = await checkGradleConfig();
53
53
  if (gradleConfig.crunchPngs !== false) {
54
- console.warn('android crunchPngs 选项似乎尚未禁用(如已禁用则请忽略此提示),这可能导致热更包体积异常增大,具体请参考 https://pushy.reactnative.cn/docs/getting-started.html#%E7%A6%81%E7%94%A8-android-%E7%9A%84-crunch-%E4%BC%98%E5%8C%96 \n');
54
+ console.warn('android的crunchPngs选项似乎尚未禁用(如已禁用则请忽略此提示),这可能导致热更包体积异常增大,具体请参考 https://pushy.reactnative.cn/docs/getting-started.html#%E7%A6%81%E7%94%A8-android-%E7%9A%84-crunch-%E4%BC%98%E5%8C%96 \n');
55
55
  }
56
56
  }
57
57
 
@@ -68,16 +68,18 @@ async function runReactNativeBundleCommand(bundleName, development, entryFile, o
68
68
  let cliPath = require.resolve('react-native/local-cli/cli.js', {
69
69
  paths: [process.cwd()]
70
70
  });
71
- let isExpo = false;
72
71
  try {
73
- // use expo-cli if exists
72
+ require.resolve('expo-router', {
73
+ paths: [process.cwd()]
74
+ });
75
+
76
+ console.log(`expo-router detected, will use @expo/cli to bundle.\n`);
77
+ // if using expo-router, use expo-cli
74
78
  cliPath = require.resolve('@expo/cli', {
75
79
  paths: [process.cwd()]
76
80
  });
77
- isExpo = true;
78
- console.log(`expo detected, will use @expo/cli to bundle.\n`);
79
81
  } catch (e) {}
80
- const bundleCommand = isExpo ? 'export:embed' : 'bundle';
82
+ const bundleCommand = cliPath.includes('@expo/cli') ? 'export:embed' : 'bundle';
81
83
 
82
84
  Array.prototype.push.apply(reactNativeBundleArgs, [cliPath, bundleCommand, '--assets-dest', outputFolder, '--bundle-output', _path2.default.join(outputFolder, bundleName), '--dev', development, '--entry-file', entryFile, '--platform', platform, '--reset-cache']);
83
85
 
@@ -175,9 +177,9 @@ async function compileHermesByteCode(bundleName, outputFolder, sourcemapOutput)
175
177
  const hermesCommand = `${hermesPath}/hermesc`;
176
178
 
177
179
  const args = ['-emit-binary', '-out', _path2.default.join(outputFolder, bundleName), _path2.default.join(outputFolder, bundleName), '-O'];
178
- // if (sourcemapOutput) {
179
- // args.push('-output-source-map');
180
- // }
180
+ if (sourcemapOutput) {
181
+ args.push('-output-source-map');
182
+ }
181
183
  console.log('Running hermesc: ' + hermesCommand + ' ' + args.join(' ') + '\n');
182
184
  (0, _child_process.spawnSync)(hermesCommand, args, {
183
185
  stdio: 'ignore'
package/lib/index.js CHANGED
File without changes
package/lib/package.js CHANGED
@@ -61,12 +61,11 @@ async function choosePackage(appId) {
61
61
  }
62
62
 
63
63
  const commands = exports.commands = {
64
- uploadIpa: async function ({ args, options }) {
64
+ uploadIpa: async function ({ args }) {
65
65
  const fn = args[0];
66
66
  if (!fn || !fn.endsWith('.ipa')) {
67
67
  throw new Error('使用方法: pushy uploadIpa ipa后缀文件');
68
68
  }
69
- const { note = '' } = options;
70
69
  const {
71
70
  versionName,
72
71
  buildTime,
@@ -88,18 +87,16 @@ const commands = exports.commands = {
88
87
  const { id } = await (0, _api.post)(`/app/${appId}/package/create`, {
89
88
  name: versionName,
90
89
  hash,
91
- buildTime,
92
- note
90
+ buildTime
93
91
  });
94
92
  (0, _utils.saveToLocal)(fn, `${appId}/package/${id}.ipa`);
95
93
  console.log(`已成功上传ipa原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`);
96
94
  },
97
- uploadApk: async function ({ args, options }) {
95
+ uploadApk: async function ({ args }) {
98
96
  const fn = args[0];
99
97
  if (!fn || !fn.endsWith('.apk')) {
100
98
  throw new Error('使用方法: pushy uploadApk apk后缀文件');
101
99
  }
102
- const { note = '' } = options;
103
100
  const {
104
101
  versionName,
105
102
  buildTime,
@@ -121,8 +118,7 @@ const commands = exports.commands = {
121
118
  const { id } = await (0, _api.post)(`/app/${appId}/package/create`, {
122
119
  name: versionName,
123
120
  hash,
124
- buildTime,
125
- note
121
+ buildTime
126
122
  });
127
123
  (0, _utils.saveToLocal)(fn, `${appId}/package/${id}.apk`);
128
124
  console.log(`已成功上传apk原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`);
package/lib/versions.js CHANGED
@@ -13,6 +13,8 @@ var _app = require('./app');
13
13
 
14
14
  var _package = require('./package');
15
15
 
16
+ var _compareVersions = require('compare-versions');
17
+
16
18
  async function showVersion(appId, offset) {
17
19
  const { data, count } = await (0, _api.get)(`/app/${appId}/version/list`);
18
20
  console.log(`Offset ${offset}`);
@@ -120,6 +122,8 @@ const commands = exports.commands = {
120
122
 
121
123
  let pkgId;
122
124
  let pkgVersion = options.packageVersion;
125
+ let minPkgVersion = options.minPackageVersion;
126
+ let maxPkgVersion = options.maxPackageVersion;
123
127
  if (pkgVersion) {
124
128
  pkgVersion = pkgVersion.trim();
125
129
  const { data } = await (0, _api.get)(`/app/${appId}/package/list?limit=1000`);
@@ -130,6 +134,38 @@ const commands = exports.commands = {
130
134
  throw new Error(`未查询到匹配原生版本:${pkgVersion}`);
131
135
  }
132
136
  }
137
+ if (minPkgVersion) {
138
+ minPkgVersion = String(minPkgVersion).trim();
139
+ const { data } = await (0, _api.get)(`/app/${appId}/package/list?limit=1000`);
140
+ const pkgs = data.filter(d => (0, _compareVersions.compare)(d.name, minPkgVersion, '>='));
141
+ if (pkgs.length === 0) {
142
+ throw new Error(`未查询到 >= ${minPkgVersion} 的原生版本`);
143
+ }
144
+ for (const pkg of pkgs) {
145
+ await (0, _api.put)(`/app/${appId}/package/${pkg.id}`, {
146
+ versionId
147
+ });
148
+ console.log(`已将版本 ${versionId} 绑定到原生版本 ${pkg.name}`);
149
+ }
150
+ console.log(`操作完成,共已绑定 ${pkgs.length} 个原生版本`);
151
+ return;
152
+ }
153
+ if (maxPkgVersion) {
154
+ maxPkgVersion = String(maxPkgVersion).trim();
155
+ const { data } = await (0, _api.get)(`/app/${appId}/package/list?limit=1000`);
156
+ const pkgs = data.filter(d => (0, _compareVersions.compare)(d.name, maxPkgVersion, '<='));
157
+ if (pkgs.length === 0) {
158
+ throw new Error(`未查询到 <= ${maxPkgVersion} 的原生版本`);
159
+ }
160
+ for (const pkg of pkgs) {
161
+ await (0, _api.put)(`/app/${appId}/package/${pkg.id}`, {
162
+ versionId
163
+ });
164
+ console.log(`已将版本 ${versionId} 绑定到原生版本 ${pkg.name}`);
165
+ }
166
+ console.log(`操作完成,共已绑定 ${pkgs.length} 个原生版本`);
167
+ return;
168
+ }
133
169
  if (!pkgId) {
134
170
  pkgId = options.packageId || (await (0, _package.choosePackage)(appId)).id;
135
171
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-update-cli",
3
- "version": "1.26.0",
3
+ "version": "1.27.0",
4
4
  "description": "Command tools for javaScript updater with `pushy` service for react native apps.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -12,7 +12,7 @@
12
12
  "cli.json"
13
13
  ],
14
14
  "scripts": {
15
- "prepublish": "babel src --out-dir lib"
15
+ "prepublish": "babel src --out-dir lib && chmod +x lib/index.js"
16
16
  },
17
17
  "repository": {
18
18
  "type": "git",
@@ -36,6 +36,7 @@
36
36
  "cgbi-to-png": "^1.0.7",
37
37
  "cli-arguments": "^0.2.1",
38
38
  "commander": "^7.2.0",
39
+ "compare-versions": "^6.1.1",
39
40
  "filesize-parser": "^1.5.0",
40
41
  "fs-extra": "8",
41
42
  "gradle-to-js": "^2.0.1",
package/src/api.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import fetch from 'node-fetch';
2
- const defaultEndpoint = 'https://update.react-native.cn/api';
2
+ const defaultEndpoint = 'https://update.reactnative.cn/api';
3
3
  let host = process.env.PUSHY_REGISTRY || defaultEndpoint;
4
4
  import fs from 'fs';
5
5
  import request from 'request';
package/src/bundle.js CHANGED
@@ -33,7 +33,7 @@ async function runReactNativeBundleCommand(
33
33
  gradleConfig = await checkGradleConfig();
34
34
  if (gradleConfig.crunchPngs !== false) {
35
35
  console.warn(
36
- 'android crunchPngs 选项似乎尚未禁用(如已禁用则请忽略此提示),这可能导致热更包体积异常增大,具体请参考 https://pushy.reactnative.cn/docs/getting-started.html#%E7%A6%81%E7%94%A8-android-%E7%9A%84-crunch-%E4%BC%98%E5%8C%96 \n',
36
+ 'android的crunchPngs选项似乎尚未禁用(如已禁用则请忽略此提示),这可能导致热更包体积异常增大,具体请参考 https://pushy.reactnative.cn/docs/getting-started.html#%E7%A6%81%E7%94%A8-android-%E7%9A%84-crunch-%E4%BC%98%E5%8C%96 \n',
37
37
  );
38
38
  }
39
39
  }
@@ -54,16 +54,20 @@ async function runReactNativeBundleCommand(
54
54
  let cliPath = require.resolve('react-native/local-cli/cli.js', {
55
55
  paths: [process.cwd()],
56
56
  });
57
- let isExpo = false;
58
57
  try {
59
- // use expo-cli if exists
58
+ require.resolve('expo-router', {
59
+ paths: [process.cwd()],
60
+ });
61
+
62
+ console.log(`expo-router detected, will use @expo/cli to bundle.\n`);
63
+ // if using expo-router, use expo-cli
60
64
  cliPath = require.resolve('@expo/cli', {
61
65
  paths: [process.cwd()],
62
66
  });
63
- isExpo = true;
64
- console.log(`expo detected, will use @expo/cli to bundle.\n`);
65
67
  } catch (e) {}
66
- const bundleCommand = isExpo ? 'export:embed' : 'bundle';
68
+ const bundleCommand = cliPath.includes('@expo/cli')
69
+ ? 'export:embed'
70
+ : 'bundle';
67
71
 
68
72
  Array.prototype.push.apply(reactNativeBundleArgs, [
69
73
  cliPath,
@@ -200,7 +204,7 @@ async function compileHermesByteCode(
200
204
  }
201
205
 
202
206
  const hermesCommand = `${hermesPath}/hermesc`;
203
-
207
+
204
208
  const args = [
205
209
  '-emit-binary',
206
210
  '-out',
@@ -208,9 +212,9 @@ async function compileHermesByteCode(
208
212
  path.join(outputFolder, bundleName),
209
213
  '-O',
210
214
  ];
211
- // if (sourcemapOutput) {
212
- // args.push('-output-source-map');
213
- // }
215
+ if (sourcemapOutput) {
216
+ args.push('-output-source-map');
217
+ }
214
218
  console.log(
215
219
  'Running hermesc: ' + hermesCommand + ' ' + args.join(' ') + '\n',
216
220
  );
package/src/package.js CHANGED
@@ -48,12 +48,11 @@ export async function choosePackage(appId) {
48
48
  }
49
49
 
50
50
  export const commands = {
51
- uploadIpa: async function ({ args, options }) {
51
+ uploadIpa: async function ({ args }) {
52
52
  const fn = args[0];
53
53
  if (!fn || !fn.endsWith('.ipa')) {
54
54
  throw new Error('使用方法: pushy uploadIpa ipa后缀文件');
55
55
  }
56
- const { note = '' } = options;
57
56
  const {
58
57
  versionName,
59
58
  buildTime,
@@ -80,19 +79,17 @@ export const commands = {
80
79
  name: versionName,
81
80
  hash,
82
81
  buildTime,
83
- note,
84
82
  });
85
83
  saveToLocal(fn, `${appId}/package/${id}.ipa`);
86
84
  console.log(
87
85
  `已成功上传ipa原生包(id: ${id}, version: ${versionName}, buildTime: ${buildTime})`,
88
86
  );
89
87
  },
90
- uploadApk: async function ({ args, options }) {
88
+ uploadApk: async function ({ args }) {
91
89
  const fn = args[0];
92
90
  if (!fn || !fn.endsWith('.apk')) {
93
91
  throw new Error('使用方法: pushy uploadApk apk后缀文件');
94
92
  }
95
- const { note = '' } = options;
96
93
  const {
97
94
  versionName,
98
95
  buildTime,
@@ -119,7 +116,6 @@ export const commands = {
119
116
  name: versionName,
120
117
  hash,
121
118
  buildTime,
122
- note,
123
119
  });
124
120
  saveToLocal(fn, `${appId}/package/${id}.apk`);
125
121
  console.log(
package/src/versions.js CHANGED
@@ -3,6 +3,7 @@ import { question, saveToLocal } from './utils';
3
3
 
4
4
  import { checkPlatform, getSelectedApp } from './app';
5
5
  import { choosePackage } from './package';
6
+ import { compare } from 'compare-versions';
6
7
 
7
8
  async function showVersion(appId, offset) {
8
9
  const { data, count } = await get(`/app/${appId}/version/list`);
@@ -127,6 +128,8 @@ export const commands = {
127
128
 
128
129
  let pkgId;
129
130
  let pkgVersion = options.packageVersion;
131
+ let minPkgVersion = options.minPackageVersion;
132
+ let maxPkgVersion = options.maxPackageVersion;
130
133
  if (pkgVersion) {
131
134
  pkgVersion = pkgVersion.trim();
132
135
  const { data } = await get(`/app/${appId}/package/list?limit=1000`);
@@ -137,6 +140,42 @@ export const commands = {
137
140
  throw new Error(`未查询到匹配原生版本:${pkgVersion}`);
138
141
  }
139
142
  }
143
+ if (minPkgVersion) {
144
+ minPkgVersion = String(minPkgVersion).trim();
145
+ const { data } = await get(`/app/${appId}/package/list?limit=1000`);
146
+ const pkgs = data.filter((d) => compare(d.name, minPkgVersion, '>='));
147
+ if (pkgs.length === 0) {
148
+ throw new Error(
149
+ `未查询到 >= ${minPkgVersion} 的原生版本`,
150
+ );
151
+ }
152
+ for (const pkg of pkgs) {
153
+ await put(`/app/${appId}/package/${pkg.id}`, {
154
+ versionId,
155
+ });
156
+ console.log(`已将版本 ${versionId} 绑定到原生版本 ${pkg.name}`);
157
+ }
158
+ console.log(`操作完成,共已绑定 ${pkgs.length} 个原生版本`);
159
+ return;
160
+ }
161
+ if (maxPkgVersion) {
162
+ maxPkgVersion = String(maxPkgVersion).trim();
163
+ const { data } = await get(`/app/${appId}/package/list?limit=1000`);
164
+ const pkgs = data.filter((d) => compare(d.name, maxPkgVersion, '<='));
165
+ if (pkgs.length === 0) {
166
+ throw new Error(
167
+ `未查询到 <= ${maxPkgVersion} 的原生版本`,
168
+ );
169
+ }
170
+ for (const pkg of pkgs) {
171
+ await put(`/app/${appId}/package/${pkg.id}`, {
172
+ versionId,
173
+ });
174
+ console.log(`已将版本 ${versionId} 绑定到原生版本 ${pkg.name}`);
175
+ }
176
+ console.log(`操作完成,共已绑定 ${pkgs.length} 个原生版本`);
177
+ return;
178
+ }
140
179
  if (!pkgId) {
141
180
  pkgId = options.packageId || (await choosePackage(appId)).id;
142
181
  }