构建一个纯离线的 Meteor 应用

Building a pure offline Meteor app

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

据我测试,可以使用 appcache package 使其正常工作(在线时访问该页面一次,离线时可以访问该页面),不过好像不太靠谱

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

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

您可以构建一个完全离线的 Meteor 应用程序,但有一些 'weird' 妥协。

  • Meteor 在建立 DDP 连接时有点力不从心,因此将其作为一种空环回连接到 127.0.0.1,因为没有服务器。

  • 自从引入 Cordova 系统以来,Meteor 已经以这种 offline-only 方式构建应用程序,因此它只是将其提取出来。有 serverweb.cordovabrowser.

  • 的版本

1 ) 捆绑您的应用并将其提取出来

我只是从待办事项应用程序中随机生成一个示例(它需要服务器端位,但请忽略它)

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)

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

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

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