似乎是关于如何在Stack Overflow上没有互联网连接的情况下如何使用Meteor脱机的一些问题,但我对是否有可能构建Meteor应用程序感兴趣将仅脱机使用。例如,是否可以生成包含单个HTML文件和所有其他必要文件的文件夹(图像,以及可能的CSS文件和JavaScript文件,如果它们没有嵌入到HTML文件中),并且一切都是开箱即用的什么时候在浏览器中打开HTML文件?
据我测试过,可以使用appcache package(当一个人在线时访问该页面一次,然后当一个人离线时可以访问该页面)来使其工作,但是它似乎不可靠。
我也注意到the stand alone blaze project,但我想利用Meteor的功能(开发过程中的热门代码推送,软件包,minimalongo等)。
那么,有没有人知道我想做的事情是否可以通过某种方式实现?
答案 0 :(得分:21)
你可以建立一个纯粹的离线流星应用程序,但有一些奇怪的'妥协。
Meteor在建立DDP连接时有点强大,所以它是127.0.0.1作为一种空环回,因为没有服务器。
自从Cordova系统推出以来,Meteor已经以这种离线方式构建了应用程序,因此它只是提取了它。有server
,web.cordova
和browser
的版本。
1)捆绑您的应用并将其解压缩
我只是在todo应用程序中做一个随机的例子(它需要一个服务器端位,但很好地忽略它)
meteor create --example todos
cd todos
meteor bundle ~/Desktop/app.tar.gz
cd Desktop
tar xvzf app.tar.gz
2)在捆绑包中,/programs/web.browser
有一个目录,这是您的离线应用程序的框架,因此请将该目录放在某个位置。
3)有两个文件以散列作为文件名。将它们重命名为app.js
和app.css
4)有一个名为app
的目录。将其所有内容移至主目录,即
cd app
mv * ../
rm -r app
5)创建一个index.html
文件,其中包含以下内容:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="app.css?meteor_css_resource=true">
<script type="text/javascript">
__meteor_runtime_config__ = {
"meteorRelease": "1.0.0",
"ROOT_URL": "/",
"ROOT_URL_PATH_PREFIX": "",
"autoupdateVersion": "00000",
"DDP_DEFAULT_CONNECTION_URL": "127.0.0.1"
};
</script>
<script type="text/javascript" src="app.js"></script>
<script type="text/javascript">
if (typeof Package === 'undefined' ||
!Package.webapp ||
!Package.webapp.WebApp ||
!Package.webapp.WebApp._isCssLoaded())
console.log("Load Fail");
</script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0">
<meta http-equiv="content-language" content="en">
<meta name='apple-mobile-web-app-capable' content='yes' />
<meta name='apple-mobile-web-app-status-bar-style' content='black' />
<title>Your App</title>
</head>
<body>
</body>
</html>
瞧:
请记住这个应用需要一个服务器,所以这种方式很无用,但如果你愿意,你可以制作一个纯粹的客户端应用。
其他考虑因素:
为图像,字体和其他文件使用基于文件的html路径(file.jpg而不是/images/file.jpg)
使用铁路由器有点棘手,但你不能使用/
你必须使用index.html和相对路径
您可以删除meteor-platform
中不使用的多余软件包,例如autoupdate
大气中有一些包有助于数据存储,例如ground:db
而不是需要服务器端的mongo集合。