构建纯粹的离线Meteor应用程序

时间:2015-01-05 21:07:25

标签: meteor offline

似乎是关于如何在Stack Overflow上没有互联网连接的情况下如何使用Meteor脱机的一些问题,但我对是否有可能构建Meteor应用程序感兴趣将脱机使用。例如,是否可以生成包含单个HTML文件和所有其他必要文件的文件夹(图像,以及可能的CSS文件和JavaScript文件,如果它们没有嵌入到HTML文件中),并且一切都是开箱即用的什么时候在浏览器中打开HTML文件?

据我测试过,可以使用appcache package(当一个人在线时访问该页面一次,然后当一个人离线时可以访问该页面)来使其工作,但是它似乎不可靠。

我也注意到the stand alone blaze project,但我想利用Meteor的功能(开发过程中的热门代码推送,软件包,minimalongo等)。

那么,有没有人知道我想做的事情是否可以通过某种方式实现?

1 个答案:

答案 0 :(得分:21)

你可以建立一个纯粹的离线流星应用程序,但有一些奇怪的'妥协。

  • Meteor在建立DDP连接时有点强大,所以它是127.0.0.1作为一种空环回,因为没有服务器。

  • 自从Cordova系统推出以来,Meteor已经以这种离线方式构建了应用程序,因此它只是提取了它。有serverweb.cordovabrowser的版本。

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.jsapp.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>

瞧:

Keep in mind this app *needs* a server so its quite useless this way, but you can make a purely client side app

请记住这个应用需要一个服务器,所以这种方式很无用,但如果你愿意,你可以制作一个纯粹的客户端应用。

其他考虑因素:

  • 为图像,字体和其他文件使用基于文件的html路径(file.jpg而不是/images/file.jpg)

  • 使用铁路由器有点棘手,但你不能使用/你必须使用index.html和相对路径

  • 您可以删除meteor-platform中不使用的多余软件包,例如autoupdate

  • 大气中有一些包有助于数据存储,例如ground:db而不是需要服务器端的mongo集合。