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

Pep*_*L-G 15 offline meteor

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

据我所测试,可以使用appcache包来实现(当一个人在线时访问一个页面,然后一个人在离线时可以访问它),但它似乎不可靠.

我也注意到了独立火焰项目,但我想利用Meteor的功能(在开发过程中热门代码推送,包,最小化等).

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

Aks*_*hat 22

你可以构建一个纯粹离线的Meteor应用程序,但有一些"怪异"的妥协.

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

  • 自从Cordova系统推出以来,Meteor已经以这种离线方式构建了应用程序,所以它只是提取了它.有和server,web.cordovabrowser.

1)捆绑您的应用程序并将其解压缩

我只是在todo应用程序中做一个随机的例子(它需要一个服务器端位,但很好地忽略它)

meteor create --example todos
cd todos
meteor bundle ~/Desktop/app.tar.gz
cd Desktop
tar xvzf app.tar.gz
Run Code Online (Sandbox Code Playgroud)

2)在bundle中有一个目录/programs/web.browser,这是你的离线应用程序的框架,所以把那个目录放在某个地方.

3)有两个文件带有散列作为文件名.将它们重命名为app.jsapp.css

4)有一个名为的目录app.将其所有内容移动到主目录,即

cd app
mv * ../
rm -r app
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

瞧:

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

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

其他考虑:

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

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

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

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

  • 我用我自己的应用程序对此进行了测试。`meteor bundle` 已被弃用,我被指示使用 `meteor build` 代替。另外,我没有`app`目录(可能是因为我的应用没有图像?),但该应用离线工作没有问题。谢谢! (2认同)