迁移到 Meteor 1.4
重大更改
这些都是所有重大更改 - 也就是说,如果您要将应用程序从 1.3.x 更新到 1.4,则必须注意的更改。但是,我们建议您也考虑推荐的更改如下所示。
通常需要 babel-runtime
npm
babel-runtime
npm 包通常作为依赖项是必需的,因为 Meteor babel-runtime
包不再尝试提供 Babel 辅助函数的自定义实现。要在任何 Meteor 应用程序中安装 babel-runtime
npm,请运行以下命令
meteor npm install --save babel-runtime
使用 meteor create <app-name>
创建的新项目会自动将其添加到其 package.json
的 dependencies
中。
二进制包需要构建工具链
Meteor 1.4 的主要功能是升级到 Node 版本 4。Node 4 包括一个更改的 ABI(应用程序二进制接口),这意味着您的应用程序使用的二进制 npm 包将需要重新编译。
一些非常常见的二进制包(例如 npm-bcrypt
)已经针对 Node 4 平台重新发布,因此,如果您使用的是有限的包集,这可能不会影响您;但是,如果您使用的是不太常见的依赖项,这可能是一个问题。
如果您的应用程序 node_modules
目录中包含二进制 npm 包,则应在您的应用程序目录中运行 meteor npm rebuild
(在 meteor update
之后)以重新编译这些包。
如果 Meteor 包的二进制 npm 依赖项尚未使用正确的 ABI 编译,则 Meteor 会自动重新编译它们。这通常会在您更新到 1.4 后第一次启动应用程序时发生,但当您 meteor add some:package
使用不同版本的 Meteor 和/或 Node 发布的包时也可能发生。
为了使此重建工作,您需要在开发机器上安装基本的编译器工具链。具体来说,
OS X 用户应安装命令行工具(简而言之,运行
xcode-select --install
)。Windows 用户应安装MS Build Tools。
Linux 用户应确保已安装 Python 2.7、
make
和 C 编译器 (g++)。
要测试您的编译器工具链是否已安装并正常工作,请尝试使用 meteor npm
在您的应用程序中安装任何二进制 npm 包。例如,运行 meteor npm install bcrypt
然后 meteor node
,然后尝试从 Node shell 调用 require("bcrypt")
。
从 MongoDB 2.4 更新
Meteor 已更新为使用 node MongoDB 驱动程序的 2.2.4 版本。这意味着 Meteor 现在提供对 MongoDB 3.2(最新稳定版本)和 WiredTiger 存储引擎的完全支持。我们建议您将应用程序更新到 MongoDB 3.2。
如果您当前正在使用 MongoDB 2.4,请注意该版本已达到生命周期结束,您至少应更新到 2.6 版本。2.6 版本是 Meteor 1.4 支持的最低版本。
将您的数据库更新到 2.6 通常非常简单。有关如何操作的详细信息,请参阅MongoDB 文档。
从 1.4 开始,您必须确保您的
MONGO_OPLOG_URL
包含replicaSet
参数(请参阅变更日志和oplog 文档)。
注意:某些 MongoDB 托管提供商可能具有不需要您使用
replicaSet
参数的部署设置。例如,Compose.io 具有两种类型的部署:MongoDB Classic 和 MongoDB+。新的 MongoDB+ 产品是分片设置,而不是真正的副本集(尽管分片作为副本集实现),因此它不需要replicaSet
参数,如果您将其添加到连接字符串中,Meteor 将会报错。
如果您看到身份验证失败,您可能需要升级到SCRAM-SHA-1,本质上:
use admin, db.adminCommand({authSchemaUpgrade: 1});
。您可能需要删除并重新添加您的 oplog 读取器用户。
删除调试语句
由于 Node 4 中的更改,如果您在代码中包含 `debugger` 语句,它们现在即使没有附加调试器也会命中断点。这也意味着您现在可以在不使用 `--debug-brk` 选项的情况下进行调试。密码重置和注册令牌现在已过期
密码重置令牌现在已过期(默认情况下 3 天后过期 - 可以通过 Accounts.config({ passwordResetTokenExpirationInDays: ...}) 修改。[PR #7534](https://github.com/meteor/meteor/pull/7534)有关拆分重置与注册令牌以及允许不同过期时间的信息,请参阅PR #7794。
建议
首先更新到 Meteor 1.3.5.1
虽然不是强制性的,但在更新到 1.4 之前将您的应用程序更新到 Meteor 1.3.5.1 可能会有所帮助,因为 1.3.5.1 是 1.4 之前的最新版本,并且包含与 1.4 大部分相同的代码。要将应用程序更新到 1.3.5.1,请在应用程序目录中运行 meteor update --release 1.3.5.1
。当您确信应用程序正常工作后,meteor update
将会带您一直更新到 Meteor 1.4。
更新到 MongoDB 3.2
尽管 Meteor 1.4 支持 MongoDB 2.6 及更高版本,以及旧的 MMAPv1 存储引擎,但我们建议您更新数据库以使用新的 WiredTiger 存储引擎并使用 MongoDB 3.2。
要将您的生产数据库更新到 3.2 版本,您应遵循MongoDB 文档中列出的步骤。要更新您的存储引擎,您应确保遵循 3.0 升级文档中的“将存储引擎更改为 WiredTiger”说明。
如果您使用的是 OS X 或 64 位 Linux,您可以以类似的方式更新您的开发数据库(如果您照常运行 meteor
,则可以连接到 localhost:3001/meteor
上的开发数据库)。但是,如果您不关心开发数据库中的数据,最简单的方法是使用 meteor reset
删除所有本地数据(包括您的开发数据库)。当您下次启动 meteor
时,数据库将使用 3.2 WiredTiger 引擎重新创建。
如果您使用的是 Windows 或 32 位 Linux,您可以将开发数据库更新到 3.2,但它将继续使用 MMAPv1 存储引擎,因为 32 位 MongoDB 二进制文件不支持 WiredTiger。
使用嵌套导入
由于使用了reify 库,Meteor 现在完全支持应用程序和包模块中的嵌套 import
声明,而以前它们仅允许在应用程序代码中使用
if (Meteor.isClient) {
import { symbol } from './client-only/file';
}
这在仅打算在客户端或服务器上运行的测试文件中特别有用 - 您现在可以在任何位置使用 import
,而无需在 client
或 server
目录中组织您的测试。