서버에서 dev/stage/prod를 전환하려면 ENV 변수를 설정합니다. 이것은 꽤 표준입니다.오프라인 Chrome 패키지 애플리케이션 : Prod 및 Dev 모드를 관리하는 방법
오프라인 Chrome 앱을 사용하면 dev/stage/prod간에 전환하려면 어떻게해야하나요? 특히 REST API URL이 주위에 있습니까?
개발하는 동안 내 앱이 "풀린"앱으로 Chrome에 설치됩니다.
해결 방법 :
나는이 대답을 결합했다. 다음은 내가 한 일입니다.
설치시 압축 해제 확장 프로그램을 사용하면 localStorage에 값을 설정합니다.
실행시 변수를 localstorage 값으로 설정하거나 정의되지 않은 경우 프로덕션으로 설정합니다.
background.js :
chrome.runtime.onInstalled.addListener(function() { console.log('onInstalled'); // Note: this event is fired every time the "Reload" link is clicked in // 'Chrome Apps & Extensions Developer Tool'. So only set if not set. // If unpacked extension, if(!chrome.runtime.getManifest().update_url) { // Load existing value chrome.storage.local.get('APIBaseURL', function(data) { // Has value already been set? if (!data.hasOwnProperty('APIBaseURL')) { // set API server to localhost chrome.storage.local.set({'APIBaseURL': DEV_APIBASEURL }, function() { // Ok, notify the console. console.log('Installed in dev mode: APIBaseURL = '+DEV_APIBASEURL); }); } }); } });
App.js (.이 각도이지만,이 패턴을 볼 약속이 ES6 있습니다)
FWIW, 여기에 코드입니다
var PROD_APIBASEURL = 'https://production.com';
angular.module('wmw', ['wmw.routes'])
// Listen for online/offline events and set status in $rootScope
.run(['$rootScope', function($rootScope){
// Determine which server to run on
$rootScope.isDev = chrome.runtime.getManifest().hasOwnProperty('update_url');
// Async init code is in a Promise
$rootScope.promiseAppReady = new Promise(function(resolve, reject) {
// Get the Base URL
chrome.storage.local.get('APIBaseURL', function(data) {
// Apply it to our scope. If not set, use PROD.
$rootScope.$apply(function() {
if (data.hasOwnProperty('APIBaseURL')) {
$rootScope.APIBaseURL = data.APIBaseURL;
} else {
$rootScope.APIBaseURL = PROD_APIBASEURL;
}
resolve($rootScope.APIBaseURL);
});
});
});
}]);
$rootScope.promiseAppReady
코드가 완료되고 앱이 준비되면 알려주세요. $rootScope.$apply()
거품이 다른 범위까지 바뀝니다. Angular를 사용하지 않는 경우 제거 할 수 있습니다.
var debugTools = {
setAPIBaseURL: function (url) {
chrome.storage.local.set({'APIBaseURL': url});
},
showAPIBaseURL: function() {
chrome.storage.local.get('APIBaseURL', function(data) {console.log(data)});
}
}
은 그래서 콘솔에서 변경 쉬웠다 :
는 또한 일부 디버그 툴이 코드를 포함.
[Chrome 확장 프로그램이 압축 해제 모드로 설치되어 있는지 확인] (http://stackoverflow.com/questions/12830649/check-if-chrome-extension-installed-in-unpacked-mode) –
Chrome 앱이 없습니다. Chrome 확장 프로그램. 너는 도움이 안돼. –
@MichaelCole 일부 답변은 확장 프로그램과 앱 모두에 적용됩니다. 도움이되지 않는 경우 Q & A 형식을 유지하십시오. 질문을 편집하여 솔루션을 제거하고 다른 답으로 게시하십시오. – Xan