【问题标题】:Building a pure offline Meteor app构建一个纯离线 Meteor 应用
【发布时间】:2015-03-03 11:39:45
【问题描述】:

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

据我测试,使用appcache package 可以使其正常工作(在线时访问该页面一次,离线时可以访问该页面),但这似乎不可靠.

我也注意到the stand alone blaze project,但我想利用 Meteor 的功能(开发期间的热代码推送、包、minimongo 等)。

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

【问题讨论】:

  • 一个单独的客户端 Minimongo 似乎在 github.com/mWater/minimongo 可用。
  • 您介意使用 hacky 技术(例如从捆绑的 tar.gz 中提取文件)吗?可以按照您的要求进行操作,我曾经在 Meteor 的 cordova 支持制作 android 应用程序之前这样做
  • @Akshat,不,如果不是太复杂,我可以忍受。你介意描述一下过程吗?还是很直接?

标签: meteor offline


【解决方案1】:

您可以构建一个纯粹的离线 Meteor 应用,但有一些“奇怪”的妥协。

  • 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) 在 bundle 中有一个目录/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>

瞧:

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

其他注意事项:

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

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

  • 您可以删除meteor-platform中您不会使用的冗余包,例如自动更新

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

【讨论】:

  • 我用我自己的应用程序对此进行了测试。 meteor bundle 已弃用,我被指示改用 meteor build。此外,我没有app 目录(可能是因为我的应用程序没有图像?),但该应用程序离线工作没有问题。谢谢!
  • 纯离线移动应用怎么样?
  • @ışık 这是一个纯离线应用
  • @Akshat 很棒的信息。热码推送能用吗?
  • @praneybehl 没有热代码推送不起作用。它 100% 离线。这并不是说它不能以其他方式实现,因为它只是更新 html 和 js 文件。
猜你喜欢
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 2015-10-27
相关资源
最近更新 更多