Angularjs 离线Chrome打包应用程序:如何管理产品和开发模式
为了在服务器上的dev/stage/prod之间切换,我设置了一个ENV变量。这是相当标准的 使用离线Chrome应用程序,如何在dev/stage/prod之间切换?特别是关于RESTAPI URL的 在开发过程中,我的应用程序作为“未打包”的应用程序安装在chrome中 解决方案: 我把这些答案结合起来。以下是我所做的:Angularjs 离线Chrome打包应用程序:如何管理产品和开发模式,angularjs,google-chrome-extension,google-chrome-devtools,google-chrome-app,cordova-chrome-app,Angularjs,Google Chrome Extension,Google Chrome Devtools,Google Chrome App,Cordova Chrome App,为了在服务器上的dev/stage/prod之间切换,我设置了一个ENV变量。这是相当标准的 使用离线Chrome应用程序,如何在dev/stage/prod之间切换?特别是关于RESTAPI URL的 在开发过程中,我的应用程序作为“未打包”的应用程序安装在chrome中 解决方案: 我把这些答案结合起来。以下是我所做的: 在安装时,如果未打包扩展,我将在localStorage中设置一个值 在应用程序运行时,我将变量设置为localstorage值,如果未定义,则设置为production
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)
$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.runtime.getManifest().update\u url
如果从应用商店安装,将具有一个值。如果没有,则未定义
看
和控制台中的
chrome.runtime.getManifest().update\u url
如果是从存储安装的,则会有一个值。如果没有,则未定义
看
根据您的描述,我认为您不希望Chrome应用程序仅在从Chrome Web应用商店安装时与远程服务器通话,并且仅在未打包安装时与本地服务器通话。我认为您可能希望选择与任何一台服务器对话,无论它是如何安装的
因此,我会对应用程序进行编程,根据本地存储中的密钥选择其服务器。然后可以从“开发人员工具”面板(资源)选项卡轻松设置该键。如果密钥未定义,它将使用远程服务器。根据您的描述,我认为您不希望Chrome应用程序仅在从Chrome Web Store安装时与远程服务器通信,并且仅在未打包安装时与本地服务器通信。我认为您可能希望选择与任何一台服务器对话,无论它是如何安装的
因此,我会对应用程序进行编程,根据本地存储中的密钥选择其服务器。然后可以从“开发人员工具”面板(资源)选项卡轻松设置该键。如果密钥未定义,则使用远程服务器。可能重复的Chrome应用程序不是Chrome扩展。“你帮不了忙。@MichaelCole有些答案适用于扩展和应用程序。至于没有帮助,请保持问答格式:编辑您的问题以删除解决方案,并将其作为另一个答案发布。@xan,我发现StackOverflow超过mod'd。很抱歉向您发泄。可能重复的Chrome应用程序不是Chrome扩展。“你帮不了忙。@MichaelCole有些答案适用于扩展和应用程序。至于没有帮助,请保持问答格式:编辑您的问题以删除解决方案,并将其作为另一个答案发布。@xan,我发现StackOverflow超过mod'd。很抱歉拿你出气。这是个好答案。您可以将其概括为基于其他内容(如应用程序版本)切换行为,然后使用脚本生成清单的prod/dev版本。这是一个很好的答案。您可以将其概括为基于其他内容(如应用程序版本)切换行为,然后使用脚本生成清单的prod/dev版本。
var debugTools = {
setAPIBaseURL: function (url) {
chrome.storage.local.set({'APIBaseURL': url});
},
showAPIBaseURL: function() {
chrome.storage.local.get('APIBaseURL', function(data) {console.log(data)});
}
}