1
0
mirror of https://gitcode.com/github-mirrors/react-native-update-cli.git synced 2025-09-17 18:06:10 +08:00
Code Issues Packages Projects Releases Wiki Activity GitHub Gitee

Compare commits

..

11 Commits

Author SHA1 Message Date
sunnylqm
2bb8e83010 v1.10.0 2022-07-01 23:08:16 +08:00
sunnylqm
0cfc6e4f0d support rn 69 hermes 2022-07-01 23:02:20 +08:00
sunnylqm
da7bdbfdd2 v1.9.0 2022-06-29 09:42:05 +08:00
sunnylqm
07ee28ba3b add updateVersionInfo 2022-06-29 09:41:44 +08:00
sunnylqm
dae3e4024f v1.8.1 2021-12-24 17:55:15 +08:00
sunnylqm
d673b5736a Fix selectApp id 2021-12-24 17:53:14 +08:00
sunnylqm
732845faad Cleanup headers 2021-10-28 18:01:12 +08:00
sunnylqm
bcfdd67ea8 v1.8.0 2021-10-18 18:24:15 +08:00
sunnylqm
27ea54c1ec Update package output 2021-10-18 18:22:56 +08:00
sunnylqm
ba0fa836d1 v1.7.2 2021-10-18 18:02:43 +08:00
sunnylqm
bde76094fc v1.7.1 2021-10-18 18:00:21 +08:00
8 changed files with 148 additions and 51 deletions

View File

@@ -88,6 +88,29 @@
} }
}, },
"updateVersionInfo": {
"options": {
"platform": {
"hasValue": true
},
"versionId": {
"hasValue": true
},
"name": {
"default": false,
"hasValue": true
},
"description": {
"default": false,
"hasValue": true
},
"metaInfo": {
"default": false,
"hasValue": true
}
}
},
"build": { "build": {
"description": "Bundle javascript and copy assets." "description": "Bundle javascript and copy assets."
}, },

View File

@@ -1,6 +1,6 @@
{ {
"name": "react-native-update-cli", "name": "react-native-update-cli",
"version": "1.7.0", "version": "1.10.0",
"description": "Command tools for javaScript updater with `pushy` service for react native apps.", "description": "Command tools for javaScript updater with `pushy` service for react native apps.",
"main": "index.js", "main": "index.js",
"bin": { "bin": {
@@ -36,7 +36,7 @@
"cli-arguments": "^0.2.1", "cli-arguments": "^0.2.1",
"filesize-parser": "^1.5.0", "filesize-parser": "^1.5.0",
"fs-extra": "8", "fs-extra": "8",
"gradle-to-js": "^2.0.0", "gradle-to-js": "^2.0.1",
"node-fetch": "^2.6.1", "node-fetch": "^2.6.1",
"progress": "^2.0.3", "progress": "^2.0.3",
"read": "^1.0.7", "read": "^1.0.7",

65
pnpm-lock.yaml generated
View File

@@ -1,4 +1,4 @@
lockfileVersion: 5.3 lockfileVersion: 5.4
specifiers: specifiers:
app-info-parser: ^1.0.0 app-info-parser: ^1.0.0
@@ -10,7 +10,7 @@ specifiers:
cli-arguments: ^0.2.1 cli-arguments: ^0.2.1
filesize-parser: ^1.5.0 filesize-parser: ^1.5.0
fs-extra: '8' fs-extra: '8'
gradle-to-js: ^2.0.0 gradle-to-js: ^2.0.1
node-fetch: ^2.6.1 node-fetch: ^2.6.1
progress: ^2.0.3 progress: ^2.0.3
read: ^1.0.7 read: ^1.0.7
@@ -26,7 +26,7 @@ dependencies:
cli-arguments: 0.2.1 cli-arguments: 0.2.1
filesize-parser: 1.5.0 filesize-parser: 1.5.0
fs-extra: 8.1.0 fs-extra: 8.1.0
gradle-to-js: 2.0.0 gradle-to-js: 2.0.1
node-fetch: 2.6.5 node-fetch: 2.6.5
progress: 2.0.3 progress: 2.0.3
read: 1.0.7 read: 1.0.7
@@ -58,6 +58,22 @@ packages:
defer-to-connect: 1.1.3 defer-to-connect: 1.1.3
dev: false dev: false
/@types/keyv/3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
'@types/node': 18.0.0
dev: false
/@types/node/18.0.0:
resolution: {integrity: sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==}
dev: false
/@types/responselike/1.0.0:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies:
'@types/node': 18.0.0
dev: false
/ajv/6.12.6: /ajv/6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
dependencies: dependencies:
@@ -223,6 +239,8 @@ packages:
v8flags: 2.1.1 v8flags: 2.1.1
optionalDependencies: optionalDependencies:
chokidar: 1.7.0 chokidar: 1.7.0
transitivePeerDependencies:
- supports-color
dev: true dev: true
/babel-code-frame/6.26.0: /babel-code-frame/6.26.0:
@@ -255,6 +273,8 @@ packages:
private: 0.1.8 private: 0.1.8
slash: 1.0.0 slash: 1.0.0
source-map: 0.5.7 source-map: 0.5.7
transitivePeerDependencies:
- supports-color
dev: true dev: true
/babel-generator/6.26.1: /babel-generator/6.26.1:
@@ -275,6 +295,8 @@ packages:
dependencies: dependencies:
babel-runtime: 6.26.0 babel-runtime: 6.26.0
babel-template: 6.26.0 babel-template: 6.26.0
transitivePeerDependencies:
- supports-color
dev: true dev: true
/babel-messages/6.23.0: /babel-messages/6.23.0:
@@ -294,6 +316,8 @@ packages:
babel-runtime: 6.26.0 babel-runtime: 6.26.0
babel-template: 6.26.0 babel-template: 6.26.0
babel-types: 6.26.0 babel-types: 6.26.0
transitivePeerDependencies:
- supports-color
dev: true dev: true
/babel-plugin-transform-es2015-spread/6.22.0: /babel-plugin-transform-es2015-spread/6.22.0:
@@ -334,6 +358,8 @@ packages:
lodash: 4.17.21 lodash: 4.17.21
mkdirp: 0.5.5 mkdirp: 0.5.5
source-map-support: 0.4.18 source-map-support: 0.4.18
transitivePeerDependencies:
- supports-color
dev: true dev: true
/babel-runtime/6.26.0: /babel-runtime/6.26.0:
@@ -351,6 +377,8 @@ packages:
babel-types: 6.26.0 babel-types: 6.26.0
babylon: 6.18.0 babylon: 6.18.0
lodash: 4.17.21 lodash: 4.17.21
transitivePeerDependencies:
- supports-color
dev: true dev: true
/babel-traverse/6.26.0: /babel-traverse/6.26.0:
@@ -365,6 +393,8 @@ packages:
globals: 9.18.0 globals: 9.18.0
invariant: 2.2.4 invariant: 2.2.4
lodash: 4.17.21 lodash: 4.17.21
transitivePeerDependencies:
- supports-color
dev: true dev: true
/babel-types/6.26.0: /babel-types/6.26.0:
@@ -479,6 +509,8 @@ packages:
snapdragon-node: 2.1.1 snapdragon-node: 2.1.1
split-string: 3.1.0 split-string: 3.1.0
to-regex: 3.0.2 to-regex: 3.0.2
transitivePeerDependencies:
- supports-color
dev: true dev: true
optional: true optional: true
@@ -592,7 +624,7 @@ packages:
dev: false dev: false
/chokidar/1.7.0: /chokidar/1.7.0:
resolution: {integrity: sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=} resolution: {integrity: sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==}
deprecated: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies. deprecated: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
requiresBuild: true requiresBuild: true
dependencies: dependencies:
@@ -606,6 +638,8 @@ packages:
readdirp: 2.2.1 readdirp: 2.2.1
optionalDependencies: optionalDependencies:
fsevents: 1.2.13 fsevents: 1.2.13
transitivePeerDependencies:
- supports-color
dev: true dev: true
optional: true optional: true
@@ -786,6 +820,11 @@ packages:
/debug/2.6.9: /debug/2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
dependencies: dependencies:
ms: 2.0.0 ms: 2.0.0
dev: true dev: true
@@ -969,6 +1008,8 @@ packages:
regex-not: 1.0.2 regex-not: 1.0.2
snapdragon: 0.8.2 snapdragon: 0.8.2
to-regex: 3.0.2 to-regex: 3.0.2
transitivePeerDependencies:
- supports-color
dev: true dev: true
optional: true optional: true
@@ -1021,6 +1062,8 @@ packages:
regex-not: 1.0.2 regex-not: 1.0.2
snapdragon: 0.8.2 snapdragon: 0.8.2
to-regex: 3.0.2 to-regex: 3.0.2
transitivePeerDependencies:
- supports-color
dev: true dev: true
optional: true optional: true
@@ -1249,6 +1292,8 @@ packages:
dependencies: dependencies:
'@sindresorhus/is': 0.14.0 '@sindresorhus/is': 0.14.0
'@szmarczak/http-timer': 1.1.2 '@szmarczak/http-timer': 1.1.2
'@types/keyv': 3.1.4
'@types/responselike': 1.0.0
cacheable-request: 6.1.0 cacheable-request: 6.1.0
decompress-response: 3.3.0 decompress-response: 3.3.0
duplexer3: 0.1.4 duplexer3: 0.1.4
@@ -1263,8 +1308,8 @@ packages:
/graceful-fs/4.2.8: /graceful-fs/4.2.8:
resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==}
/gradle-to-js/2.0.0: /gradle-to-js/2.0.1:
resolution: {integrity: sha512-eoYJiSoreHG0cS5aUmv7ISJhajuULlqdqG3QKVti6x1EFkBXE8rGH6ipGKWEesXpCkfNgzBrhzo5ztIH1JWZMw==} resolution: {integrity: sha512-is3hDn9zb8XXnjbEeAEIqxTpLHUiGBqjegLmXPuyMBfKAggpadWFku4/AP8iYAGBX6qR9/5UIUIp47V0XI3aMw==}
hasBin: true hasBin: true
dependencies: dependencies:
lodash.merge: 4.6.2 lodash.merge: 4.6.2
@@ -1935,6 +1980,8 @@ packages:
regex-not: 1.0.2 regex-not: 1.0.2
snapdragon: 0.8.2 snapdragon: 0.8.2
to-regex: 3.0.2 to-regex: 3.0.2
transitivePeerDependencies:
- supports-color
dev: true dev: true
optional: true optional: true
@@ -2013,6 +2060,8 @@ packages:
regex-not: 1.0.2 regex-not: 1.0.2
snapdragon: 0.8.2 snapdragon: 0.8.2
to-regex: 3.0.2 to-regex: 3.0.2
transitivePeerDependencies:
- supports-color
dev: true dev: true
optional: true optional: true
@@ -2306,6 +2355,8 @@ packages:
graceful-fs: 4.2.8 graceful-fs: 4.2.8
micromatch: 3.1.10 micromatch: 3.1.10
readable-stream: 2.3.7 readable-stream: 2.3.7
transitivePeerDependencies:
- supports-color
dev: true dev: true
optional: true optional: true
@@ -2527,6 +2578,8 @@ packages:
source-map: 0.5.7 source-map: 0.5.7
source-map-resolve: 0.5.3 source-map-resolve: 0.5.3
use: 3.1.1 use: 3.1.1
transitivePeerDependencies:
- supports-color
dev: true dev: true
optional: true optional: true

View File

@@ -159,10 +159,6 @@ async function uploadFile(fn, key) {
realUrl, realUrl,
{ {
formData, formData,
headers: {
'User-Agent': userAgent,
'X-AccessToken': session ? session.token : '',
},
}, },
(err, resp, body) => { (err, resp, body) => {
if (err) { if (err) {

View File

@@ -100,7 +100,7 @@ export const commands = {
const platform = checkPlatform( const platform = checkPlatform(
options.platform || (await question('平台(ios/android):')), options.platform || (await question('平台(ios/android):')),
); );
const id = args[0] || (await chooseApp(platform)).id; const id = args[0] ? parseInt(args[0]) : (await chooseApp(platform)).id;
let updateInfo = {}; let updateInfo = {};
if (fs.existsSync('update.json')) { if (fs.existsSync('update.json')) {

View File

@@ -48,6 +48,7 @@ async function runReactNativeBundleCommand(
fs.emptyDirSync(outputFolder); fs.emptyDirSync(outputFolder);
// TODO sourcemap
Array.prototype.push.apply(reactNativeBundleArgs, [ Array.prototype.push.apply(reactNativeBundleArgs, [
path.join('node_modules', 'react-native', 'local-cli', 'cli.js'), path.join('node_modules', 'react-native', 'local-cli', 'cli.js'),
'bundle', 'bundle',
@@ -94,7 +95,10 @@ async function runReactNativeBundleCommand(
), ),
); );
} else { } else {
if (gradleConfig.enableHermes) { if (
(platform === 'android' && gradleConfig.enableHermes) ||
(platform === 'ios' && fs.existsSync('ios/Pods/hermes-engine'))
) {
await compileHermesByteCode(bundleName, outputFolder); await compileHermesByteCode(bundleName, outputFolder);
} }
resolve(null); resolve(null);
@@ -134,15 +138,21 @@ async function checkGradleConfig() {
async function compileHermesByteCode(bundleName, outputFolder) { async function compileHermesByteCode(bundleName, outputFolder) {
console.log(`Hermes enabled, now compiling to hermes bytecode:\n`); console.log(`Hermes enabled, now compiling to hermes bytecode:\n`);
const hermesPackage = fs.existsSync('node_modules/hermes-engine') // >= rn 0.69
? 'node_modules/hermes-engine' // 0.2+ let hermesCommand = `node_modules/react-native/sdks/hermesc/${getHermesOSBin()}/hermesc`;
: 'node_modules/hermesvm'; // < 0.2 // < rn 0.69
const hermesPath = `${hermesPackage}/${getHermesOSBin()}`; if (!fs.existsSync(hermesCommand)) {
const hermesPackage = fs.existsSync('node_modules/hermes-engine')
? 'node_modules/hermes-engine' // 0.2+
: 'node_modules/hermesvm'; // < 0.2
const hermesPath = `${hermesPackage}/${getHermesOSBin()}`;
const hermesCommand = fs.existsSync(`${hermesPath}/hermesc`) hermesCommand = fs.existsSync(`${hermesPath}/hermesc`)
? `${hermesPath}/hermesc` // 0.5+ ? `${hermesPath}/hermesc` // 0.5+
: `${hermesPath}/hermes`; // < 0.5 : `${hermesPath}/hermes`; // < 0.5
}
// TODO sourcemap
spawnSync( spawnSync(
path.join.apply(null, hermesCommand.split('/')), path.join.apply(null, hermesCommand.split('/')),
[ [
@@ -514,17 +524,11 @@ export const commands = {
options.platform || (await question('平台(ios/android):')), options.platform || (await question('平台(ios/android):')),
); );
let { let { bundleName, entryFile, intermediaDir, output, dev, verbose } =
bundleName, translateOptions({
entryFile, ...options,
intermediaDir, platform,
output, });
dev,
verbose,
} = translateOptions({
...options,
platform,
});
// const sourcemapOutput = path.join(intermediaDir, bundleName + ".map"); // const sourcemapOutput = path.join(intermediaDir, bundleName + ".map");

View File

@@ -13,20 +13,25 @@ const Table = require('tty-table');
export async function listPackage(appId) { export async function listPackage(appId) {
const { data } = await get(`/app/${appId}/package/list?limit=1000`); const { data } = await get(`/app/${appId}/package/list?limit=1000`);
const header = [{ value: 'Package Id' }, { value: 'Version' }]; const header = [{ value: '原生包 Id' }, { value: '原生版本' }];
const rows = []; const rows = [];
for (const pkg of data) { for (const pkg of data) {
const { version } = pkg; const { version } = pkg;
let versionInfo = ''; let versionInfo = '';
if (version) { if (version) {
versionInfo = ` - ${version.id} ${version.hash.slice(0, 8)} ${ versionInfo = `, 已绑定:${version.name} (${version.id})`;
version.name
}`;
} else { } else {
versionInfo = ' (newest)'; // versionInfo = ' (newest)';
} }
let output = pkg.name;
rows.push([pkg.id, `${pkg.name}(${pkg.status})${versionInfo}`]); if (pkg.status === 'paused') {
output += '(已暂停)';
}
if (pkg.status === 'expired') {
output += '(已过期)';
}
output += versionInfo;
rows.push([pkg.id, output]);
} }
console.log(Table(header, rows).render()); console.log(Table(header, rows).render());

View File

@@ -124,20 +124,22 @@ export const commands = {
); );
const { appId } = await getSelectedApp(platform); const { appId } = await getSelectedApp(platform);
const versionId = options.versionId || (await chooseVersion(appId)).id; const versionId = options.versionId || (await chooseVersion(appId)).id;
let pkgId = options.packageId;
if (!pkgId) { let pkgId;
let pkgVersion = options.packageVersion; let pkgVersion = options.packageVersion;
if (pkgVersion) { if (pkgVersion) {
pkgVersion = pkgVersion.trim(); pkgVersion = pkgVersion.trim();
const { data } = await get(`/app/${appId}/package/list?limit=1000`); const { data } = await get(`/app/${appId}/package/list?limit=1000`);
const pkg = data.find((d) => d.name === pkgVersion); const pkg = data.find((d) => d.name === pkgVersion);
if (pkg) { if (pkg) {
pkgId = pkg.id; pkgId = pkg.id;
} else { } else {
throw new Error(`未查询到匹配原生版本:${pkgVersion}`); throw new Error(`未查询到匹配原生版本:${pkgVersion}`);
}
} }
} }
if (!pkgId) {
pkgId = options.packageId || (await choosePackage(appId)).id;
}
if (!pkgId) { if (!pkgId) {
throw new Error('请提供 packageId 或 packageVersion 参数'); throw new Error('请提供 packageId 或 packageVersion 参数');
@@ -147,4 +149,18 @@ export const commands = {
}); });
console.log('操作成功'); console.log('操作成功');
}, },
updateVersionInfo: async function ({ args, options }) {
const platform = checkPlatform(
options.platform || (await question('平台(ios/android):')),
);
const { appId } = await getSelectedApp(platform);
const versionId = options.versionId || (await chooseVersion(appId)).id;
const updateParams = {};
options.name && (updateParams.name = options.name);
options.description && (updateParams.description = options.description);
options.metaInfo && (updateParams.metaInfo = options.metaInfo);
await put(`/app/${appId}/version/${versionId}`, updateParams);
console.log('操作成功');
},
}; };