mirror of
https://gitcode.com/gh_mirrors/re/react-native-pushy.git
synced 2025-09-18 22:40:40 +08:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
40742e16d8 | ||
![]() |
598ae1a506 | ||
![]() |
e5424591d1 | ||
![]() |
2cf7336b6a | ||
![]() |
7eac48ab5d | ||
![]() |
18d9b75545 | ||
![]() |
e8ec85c65f | ||
![]() |
48a776d506 | ||
![]() |
8ad526148f | ||
![]() |
cea39f1746 |
@@ -4,7 +4,7 @@
|
|||||||
"": {
|
"": {
|
||||||
"name": "harmony_use_pushy",
|
"name": "harmony_use_pushy",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@react-native-oh/react-native-harmony": "^0.72.43",
|
"@react-native-oh/react-native-harmony": "^0.72.59",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-native": "0.72.5",
|
"react-native": "0.72.5",
|
||||||
"react-native-update": "^10.26.4",
|
"react-native-update": "^10.26.4",
|
||||||
|
@@ -36,10 +36,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'pushy',
|
|
||||||
srcPath: '../node_modules/react-native-update/harmony',
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@@ -7,7 +7,7 @@
|
|||||||
"license": "",
|
"license": "",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rnoh/react-native-openharmony": "0.72.38",
|
"@rnoh/react-native-openharmony": "0.72.38",
|
||||||
"pushy": "file:../../node_modules/react-native-update/harmony"
|
"pushy": "file:../../node_modules/react-native-update/harmony/pushy.har",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { FileJSBundleProvider } from 'pushy/src/main/ets/FileJSBundleProvider';
|
import { PushyFileJSBundleProvider } from 'pushy/src/main/ets/PushyFileJSBundleProvider';
|
||||||
import { ComponentBuilderContext, RNOHCoreContext,RNAbility,
|
import { ComponentBuilderContext, RNOHCoreContext,RNAbility,
|
||||||
MetroJSBundleProvider } from '@rnoh/react-native-openharmony';
|
MetroJSBundleProvider } from '@rnoh/react-native-openharmony';
|
||||||
import {
|
import {
|
||||||
@@ -65,7 +65,7 @@ struct Index {
|
|||||||
// local debug mode
|
// local debug mode
|
||||||
new MetroJSBundleProvider(),
|
new MetroJSBundleProvider(),
|
||||||
// release mode
|
// release mode
|
||||||
new FileJSBundleProvider(this.rnohCoreContext.uiAbilityContext),
|
new PushyFileJSBundleProvider(this.rnohCoreContext.uiAbilityContext),
|
||||||
new ResourceJSBundleProvider(this.rnohCoreContext.uiAbilityContext.resourceManager, 'bundle.harmony.js')
|
new ResourceJSBundleProvider(this.rnohCoreContext.uiAbilityContext.resourceManager, 'bundle.harmony.js')
|
||||||
]),
|
]),
|
||||||
this.rnohCoreContext.logger),
|
this.rnohCoreContext.logger),
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"pushy_build_time": "2025-04-12T11:12:43.423Z",
|
"pushy_build_time": "2025-04-30T02:46:33.340Z",
|
||||||
"versionName": "1.0.0"
|
"versionName": "1.0.0"
|
||||||
}
|
}
|
@@ -15,10 +15,10 @@
|
|||||||
"hash": "pushy hash /Users/yanbo.he/Desktop/HarmonyOS/react-native-pushy/Example/harmony_use_pushy/.pushy/output/harmony.1735048297258.ppk"
|
"hash": "pushy hash /Users/yanbo.he/Desktop/HarmonyOS/react-native-pushy/Example/harmony_use_pushy/.pushy/output/harmony.1735048297258.ppk"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@react-native-oh/react-native-harmony": "^0.72.43",
|
"@react-native-oh/react-native-harmony": "^0.72.59",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-native": "0.72.5",
|
"react-native": "0.72.5",
|
||||||
"react-native-update": "^10.26.4"
|
"react-native-update": "latest"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.20.0",
|
"@babel/core": "^7.20.0",
|
||||||
|
4
Example/testHotUpdate/.gitignore
vendored
4
Example/testHotUpdate/.gitignore
vendored
@@ -62,3 +62,7 @@ buck-out/
|
|||||||
# Ruby / CocoaPods
|
# Ruby / CocoaPods
|
||||||
/ios/Pods/
|
/ios/Pods/
|
||||||
/vendor/bundle/
|
/vendor/bundle/
|
||||||
|
|
||||||
|
# react-native-update
|
||||||
|
.update
|
||||||
|
.pushy
|
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -17,33 +17,33 @@
|
|||||||
"form-data": "^4.0.2",
|
"form-data": "^4.0.2",
|
||||||
"patch-package": "^8.0.0",
|
"patch-package": "^8.0.0",
|
||||||
"react": "19.0.0",
|
"react": "19.0.0",
|
||||||
"react-native": "0.78.0",
|
"react-native": "0.79.2",
|
||||||
"react-native-camera-kit": "^14.2.0",
|
"react-native-camera-kit": "^15.0.1",
|
||||||
"react-native-paper": "^5.13.1",
|
"react-native-paper": "^5.14.5",
|
||||||
"react-native-safe-area-context": "^5.3.0",
|
"react-native-safe-area-context": "^5.4.1",
|
||||||
"react-native-svg": "^15.11.2",
|
"react-native-svg": "^15.12.0",
|
||||||
"react-native-update": "^10.26.4",
|
"react-native-update": "^10.28.11",
|
||||||
"react-native-vector-icons": "^10.2.0"
|
"react-native-vector-icons": "^10.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.26.0",
|
"@babel/core": "^7.27.3",
|
||||||
"@babel/preset-env": "^7.26.0",
|
"@babel/preset-env": "^7.27.2",
|
||||||
"@babel/runtime": "^7.26.0",
|
"@babel/runtime": "^7.27.3",
|
||||||
"@react-native-community/cli": "15.0.1",
|
"@react-native-community/cli": "18.0.0",
|
||||||
"@react-native-community/cli-platform-android": "15.0.1",
|
"@react-native-community/cli-platform-android": "18.0.0",
|
||||||
"@react-native-community/cli-platform-ios": "15.0.1",
|
"@react-native-community/cli-platform-ios": "18.0.0",
|
||||||
"@react-native/babel-preset": "0.78.0",
|
"@react-native/babel-preset": "0.79.2",
|
||||||
"@react-native/eslint-config": "0.78.0",
|
"@react-native/eslint-config": "0.79.2",
|
||||||
"@react-native/metro-config": "0.78.0",
|
"@react-native/metro-config": "0.79.2",
|
||||||
"@react-native/typescript-config": "0.78.0",
|
"@react-native/typescript-config": "0.79.2",
|
||||||
"@types/react": "^19.0.0",
|
"@types/react": "^19.0.0",
|
||||||
"@types/react-test-renderer": "^19.0.0",
|
"@types/react-test-renderer": "^19.0.0",
|
||||||
"detox": "^20.32.0",
|
"detox": "^20.39.0",
|
||||||
"eslint": "^8.19.0",
|
"eslint": "^8.19.0",
|
||||||
"jest": "^29.6.3",
|
"jest": "^29.6.3",
|
||||||
"prettier": "2.8.8",
|
"prettier": "2.8.8",
|
||||||
"react-test-renderer": "19.0.0",
|
"react-test-renderer": "19.0.0",
|
||||||
"typescript": "5.8.2"
|
"typescript": "5.8.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
|
@@ -78,7 +78,7 @@ if (expoProject) {
|
|||||||
def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
|
def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
|
||||||
apply from: expoModulesCorePlugin
|
apply from: expoModulesCorePlugin
|
||||||
applyKotlinExpoModulesCorePlugin()
|
applyKotlinExpoModulesCorePlugin()
|
||||||
useExpoPublishing()
|
// useExpoPublishing()
|
||||||
useCoreDependencies()
|
useCoreDependencies()
|
||||||
} else {
|
} else {
|
||||||
group = 'cn.reactnative.modules.update'
|
group = 'cn.reactnative.modules.update'
|
||||||
@@ -148,7 +148,6 @@ repositories {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.facebook.react:react-native:+'
|
implementation 'com.facebook.react:react-native:+'
|
||||||
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.0'
|
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.0'
|
||||||
implementation 'com.jakewharton:process-phoenix:3.0.0'
|
|
||||||
}
|
}
|
||||||
if (isNewArchitectureEnabled()) {
|
if (isNewArchitectureEnabled()) {
|
||||||
react {
|
react {
|
||||||
|
@@ -152,8 +152,13 @@ public class UpdateModuleImpl {
|
|||||||
reactHostDelegateField.setAccessible(true);
|
reactHostDelegateField.setAccessible(true);
|
||||||
Object reactHostDelegate = reactHostDelegateField.get(reactHost);
|
Object reactHostDelegate = reactHostDelegateField.get(reactHost);
|
||||||
|
|
||||||
|
String bundleFieldName = "jsBundleLoader";
|
||||||
|
if (reactHostDelegate.getClass().getCanonicalName().equals("expo.modules.ExpoReactHostFactory.ExpoReactHostDelegate")) {
|
||||||
|
bundleFieldName = "_jsBundleLoader";
|
||||||
|
}
|
||||||
|
|
||||||
// Modify the jsBundleLoader field
|
// Modify the jsBundleLoader field
|
||||||
Field jsBundleLoaderField = reactHostDelegate.getClass().getDeclaredField("jsBundleLoader");
|
Field jsBundleLoaderField = reactHostDelegate.getClass().getDeclaredField(bundleFieldName);
|
||||||
jsBundleLoaderField.setAccessible(true);
|
jsBundleLoaderField.setAccessible(true);
|
||||||
jsBundleLoaderField.set(reactHostDelegate, loader);
|
jsBundleLoaderField.set(reactHostDelegate, loader);
|
||||||
|
|
||||||
|
@@ -20,7 +20,6 @@ import com.facebook.react.bridge.UiThreadUtil;
|
|||||||
import com.facebook.react.bridge.JSBundleLoader;
|
import com.facebook.react.bridge.JSBundleLoader;
|
||||||
import com.facebook.react.bridge.WritableMap;
|
import com.facebook.react.bridge.WritableMap;
|
||||||
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
||||||
import com.jakewharton.processphoenix.ProcessPhoenix;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
../../../../../harmony/oh_modules/.ohpm/@rnoh+react-native-openharmony@0.72.38/oh_modules/@rnoh/react-native-openharmony
|
|
BIN
harmony/pushy.har
Normal file
BIN
harmony/pushy.har
Normal file
Binary file not shown.
@@ -3,7 +3,7 @@ import fileIo from '@ohos.file.fs';
|
|||||||
import common from '@ohos.app.ability.common';
|
import common from '@ohos.app.ability.common';
|
||||||
import { UpdateContext } from './UpdateContext';
|
import { UpdateContext } from './UpdateContext';
|
||||||
|
|
||||||
export class FileJSBundleProvider extends JSBundleProvider {
|
export class PushyFileJSBundleProvider extends JSBundleProvider {
|
||||||
private updateContext: UpdateContext;
|
private updateContext: UpdateContext;
|
||||||
private filePath: string = ''
|
private filePath: string = ''
|
||||||
|
|
Submodule harmony/src/main/cpp/HDiffPatch deleted from eb959d671c
Submodule harmony/src/main/cpp/lzma deleted from c80bb80bbb
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "react-native-update",
|
"name": "react-native-update",
|
||||||
"version": "10.28.8",
|
"version": "10.29.0",
|
||||||
"description": "react-native hot update",
|
"description": "react-native hot update",
|
||||||
"main": "src/index",
|
"main": "src/index",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@@ -1,33 +1,33 @@
|
|||||||
import { CheckResult, ClientOptions, ProgressData, EventType } from './type';
|
|
||||||
import {
|
import {
|
||||||
assertDev,
|
DeviceEventEmitter,
|
||||||
|
EmitterSubscription,
|
||||||
|
Platform,
|
||||||
|
} from 'react-native';
|
||||||
|
import {
|
||||||
|
PushyModule,
|
||||||
|
buildTime,
|
||||||
|
cInfo,
|
||||||
|
currentVersion,
|
||||||
|
getCurrentVersionInfo,
|
||||||
|
isFirstTime,
|
||||||
|
isRolledBack,
|
||||||
|
packageVersion,
|
||||||
|
pushyNativeEventEmitter,
|
||||||
|
rolledBackVersion,
|
||||||
|
setLocalHashInfo,
|
||||||
|
} from './core';
|
||||||
|
import { PermissionsAndroid } from './permissions';
|
||||||
|
import { CheckResult, ClientOptions, EventType, ProgressData } from './type';
|
||||||
|
import {
|
||||||
assertWeb,
|
assertWeb,
|
||||||
emptyObj,
|
emptyObj,
|
||||||
|
enhancedFetch,
|
||||||
joinUrls,
|
joinUrls,
|
||||||
log,
|
log,
|
||||||
noop,
|
noop,
|
||||||
promiseAny,
|
promiseAny,
|
||||||
testUrls,
|
testUrls,
|
||||||
} from './utils';
|
} from './utils';
|
||||||
import {
|
|
||||||
EmitterSubscription,
|
|
||||||
Platform,
|
|
||||||
DeviceEventEmitter,
|
|
||||||
} from 'react-native';
|
|
||||||
import { PermissionsAndroid } from './permissions';
|
|
||||||
import {
|
|
||||||
PushyModule,
|
|
||||||
buildTime,
|
|
||||||
cInfo,
|
|
||||||
pushyNativeEventEmitter,
|
|
||||||
currentVersion,
|
|
||||||
packageVersion,
|
|
||||||
rolledBackVersion,
|
|
||||||
setLocalHashInfo,
|
|
||||||
isFirstTime,
|
|
||||||
isRolledBack,
|
|
||||||
getCurrentVersionInfo,
|
|
||||||
} from './core';
|
|
||||||
|
|
||||||
const SERVER_PRESETS = {
|
const SERVER_PRESETS = {
|
||||||
// cn
|
// cn
|
||||||
@@ -170,10 +170,12 @@ export class Pushy {
|
|||||||
getCheckUrl = (endpoint: string = this.options.server!.main) => {
|
getCheckUrl = (endpoint: string = this.options.server!.main) => {
|
||||||
return `${endpoint}/checkUpdate/${this.options.appKey}`;
|
return `${endpoint}/checkUpdate/${this.options.appKey}`;
|
||||||
};
|
};
|
||||||
assertDebug = () => {
|
assertDebug = (matter: string) => {
|
||||||
if (__DEV__ && !this.options.debug) {
|
if (__DEV__ && !this.options.debug) {
|
||||||
console.info(
|
console.info(
|
||||||
'You are currently in the development environment and have not enabled debug mode. The hot update check will not be performed. If you need to debug hot updates in the development environment, please set debug to true in the client.',
|
`You are currently in the development environment and have not enabled debug mode.
|
||||||
|
${matter} will not be performed.
|
||||||
|
If you need to debug ${matter} in the development environment, please set debug to true in the client.`,
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -188,7 +190,7 @@ export class Pushy {
|
|||||||
this.report({ type: 'markSuccess' });
|
this.report({ type: 'markSuccess' });
|
||||||
};
|
};
|
||||||
switchVersion = async (hash: string) => {
|
switchVersion = async (hash: string) => {
|
||||||
if (!assertDev('switchVersion()')) {
|
if (!this.assertDebug('switchVersion()')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (assertHash(hash) && !sharedState.applyingUpdate) {
|
if (assertHash(hash) && !sharedState.applyingUpdate) {
|
||||||
@@ -199,7 +201,7 @@ export class Pushy {
|
|||||||
};
|
};
|
||||||
|
|
||||||
switchVersionLater = async (hash: string) => {
|
switchVersionLater = async (hash: string) => {
|
||||||
if (!assertDev('switchVersionLater()')) {
|
if (!this.assertDebug('switchVersionLater()')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (assertHash(hash)) {
|
if (assertHash(hash)) {
|
||||||
@@ -208,7 +210,7 @@ export class Pushy {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
checkUpdate = async (extra?: Record<string, any>) => {
|
checkUpdate = async (extra?: Record<string, any>) => {
|
||||||
if (!this.assertDebug()) {
|
if (!this.assertDebug('checkUpdate()')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!assertWeb()) {
|
if (!assertWeb()) {
|
||||||
@@ -261,7 +263,7 @@ export class Pushy {
|
|||||||
type: 'checking',
|
type: 'checking',
|
||||||
message: this.options.appKey + ': ' + stringifyBody,
|
message: this.options.appKey + ': ' + stringifyBody,
|
||||||
});
|
});
|
||||||
resp = await fetch(this.getCheckUrl(), fetchPayload);
|
resp = await enhancedFetch(this.getCheckUrl(), fetchPayload);
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
this.report({
|
this.report({
|
||||||
type: 'errorChecking',
|
type: 'errorChecking',
|
||||||
@@ -272,7 +274,7 @@ export class Pushy {
|
|||||||
try {
|
try {
|
||||||
resp = await promiseAny(
|
resp = await promiseAny(
|
||||||
backupEndpoints.map(endpoint =>
|
backupEndpoints.map(endpoint =>
|
||||||
fetch(this.getCheckUrl(endpoint), fetchPayload),
|
enhancedFetch(this.getCheckUrl(endpoint), fetchPayload),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
@@ -393,7 +395,7 @@ export class Pushy {
|
|||||||
let lastError: any;
|
let lastError: any;
|
||||||
let errorMessages: string[] = [];
|
let errorMessages: string[] = [];
|
||||||
const diffUrl = await testUrls(joinUrls(paths, diff));
|
const diffUrl = await testUrls(joinUrls(paths, diff));
|
||||||
if (diffUrl) {
|
if (diffUrl && !__DEV__) {
|
||||||
log('downloading diff');
|
log('downloading diff');
|
||||||
try {
|
try {
|
||||||
await PushyModule.downloadPatchFromPpk({
|
await PushyModule.downloadPatchFromPpk({
|
||||||
@@ -406,15 +408,12 @@ export class Pushy {
|
|||||||
const errorMessage = `diff error: ${e.message}`;
|
const errorMessage = `diff error: ${e.message}`;
|
||||||
errorMessages.push(errorMessage);
|
errorMessages.push(errorMessage);
|
||||||
lastError = new Error(errorMessage);
|
lastError = new Error(errorMessage);
|
||||||
if (__DEV__) {
|
|
||||||
succeeded = 'diff';
|
|
||||||
} else {
|
|
||||||
log(errorMessage);
|
log(errorMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if (!succeeded) {
|
||||||
const pdiffUrl = await testUrls(joinUrls(paths, pdiff));
|
const pdiffUrl = await testUrls(joinUrls(paths, pdiff));
|
||||||
if (!succeeded && pdiffUrl) {
|
if (pdiffUrl && !__DEV__) {
|
||||||
log('downloading pdiff');
|
log('downloading pdiff');
|
||||||
try {
|
try {
|
||||||
await PushyModule.downloadPatchFromPackage({
|
await PushyModule.downloadPatchFromPackage({
|
||||||
@@ -426,15 +425,13 @@ export class Pushy {
|
|||||||
const errorMessage = `pdiff error: ${e.message}`;
|
const errorMessage = `pdiff error: ${e.message}`;
|
||||||
errorMessages.push(errorMessage);
|
errorMessages.push(errorMessage);
|
||||||
lastError = new Error(errorMessage);
|
lastError = new Error(errorMessage);
|
||||||
if (__DEV__) {
|
|
||||||
succeeded = 'pdiff';
|
|
||||||
} else {
|
|
||||||
log(errorMessage);
|
log(errorMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!succeeded) {
|
||||||
const fullUrl = await testUrls(joinUrls(paths, full));
|
const fullUrl = await testUrls(joinUrls(paths, full));
|
||||||
if (!succeeded && fullUrl) {
|
if (fullUrl) {
|
||||||
log('downloading full patch');
|
log('downloading full patch');
|
||||||
try {
|
try {
|
||||||
await PushyModule.downloadFullUpdate({
|
await PushyModule.downloadFullUpdate({
|
||||||
@@ -446,20 +443,21 @@ export class Pushy {
|
|||||||
const errorMessage = `full patch error: ${e.message}`;
|
const errorMessage = `full patch error: ${e.message}`;
|
||||||
errorMessages.push(errorMessage);
|
errorMessages.push(errorMessage);
|
||||||
lastError = new Error(errorMessage);
|
lastError = new Error(errorMessage);
|
||||||
if (__DEV__) {
|
|
||||||
succeeded = 'full';
|
|
||||||
} else {
|
|
||||||
log(errorMessage);
|
log(errorMessage);
|
||||||
}
|
}
|
||||||
|
} else if (__DEV__) {
|
||||||
|
log(
|
||||||
|
`当前是开发环境,无法执行增量式热更新,重启不会生效。
|
||||||
|
如果需要在开发环境中测试可生效的全量热更新(但也会在再次重启后重新连接 metro),
|
||||||
|
请打开“忽略时间戳”开关再重试。`,
|
||||||
|
);
|
||||||
|
succeeded = 'full';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sharedState.progressHandlers[hash]) {
|
if (sharedState.progressHandlers[hash]) {
|
||||||
sharedState.progressHandlers[hash].remove();
|
sharedState.progressHandlers[hash].remove();
|
||||||
delete sharedState.progressHandlers[hash];
|
delete sharedState.progressHandlers[hash];
|
||||||
}
|
}
|
||||||
if (__DEV__) {
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
if (!succeeded) {
|
if (!succeeded) {
|
||||||
this.report({
|
this.report({
|
||||||
type: 'errorUpdate',
|
type: 'errorUpdate',
|
||||||
|
@@ -251,7 +251,7 @@ export const UpdateProvider = ({
|
|||||||
const markSuccess = client.markSuccess;
|
const markSuccess = client.markSuccess;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!client.assertDebug()) {
|
if (!client.assertDebug('checkUpdate()')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const { checkStrategy, dismissErrorAfter, autoMarkSuccess } = options;
|
const { checkStrategy, dismissErrorAfter, autoMarkSuccess } = options;
|
||||||
|
31
src/utils.ts
31
src/utils.ts
@@ -40,13 +40,13 @@ const ping =
|
|||||||
: async (url: string) => {
|
: async (url: string) => {
|
||||||
let pingFinished = false;
|
let pingFinished = false;
|
||||||
return Promise.race([
|
return Promise.race([
|
||||||
fetch(url, {
|
enhancedFetch(url, {
|
||||||
method: 'HEAD',
|
method: 'HEAD',
|
||||||
})
|
})
|
||||||
.then(({ status, statusText }) => {
|
.then(({ status, statusText, url: finalUrl }) => {
|
||||||
pingFinished = true;
|
pingFinished = true;
|
||||||
if (status === 200) {
|
if (status === 200) {
|
||||||
return url;
|
return finalUrl;
|
||||||
}
|
}
|
||||||
log('ping failed', url, status, statusText);
|
log('ping failed', url, status, statusText);
|
||||||
throw new Error('Ping failed');
|
throw new Error('Ping failed');
|
||||||
@@ -69,7 +69,7 @@ const ping =
|
|||||||
|
|
||||||
export function joinUrls(paths: string[], fileName?: string) {
|
export function joinUrls(paths: string[], fileName?: string) {
|
||||||
if (fileName) {
|
if (fileName) {
|
||||||
return paths.map(path => 'https://' + path + '/' + fileName);
|
return paths.map(path => `https://${path}/${fileName}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,12 +99,19 @@ export const assertWeb = () => {
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const assertDev = (matter: string) => {
|
// export const isAndroid70AndBelow = () => {
|
||||||
if (__DEV__) {
|
// // android 7.0 and below devices do not support letsencrypt cert
|
||||||
console.warn(
|
// // https://letsencrypt.org/2023/07/10/cross-sign-expiration/
|
||||||
`${matter} is not supported in development environment; no action taken.`,
|
// return Platform.OS === 'android' && Platform.Version <= 24;
|
||||||
);
|
// };
|
||||||
return false;
|
|
||||||
}
|
export const enhancedFetch = async (
|
||||||
return true;
|
url: string,
|
||||||
|
params: Parameters<typeof fetch>[1],
|
||||||
|
) => {
|
||||||
|
return fetch(url, params).catch(e => {
|
||||||
|
log('fetch error', url, e);
|
||||||
|
log('trying fallback to http');
|
||||||
|
return fetch(url.replace('https', 'http'), params);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user