如何将 ember 2.7 升级到 3.28?

How can I upgrade ember 2.7 to 3.28?

我的团队继承了一个旧的(2017 年左右)基于 ember.js 的项目,我们需要选择是用 vue 重新制作项目,还是只升级 ember 版本。

该项目使用节点 6.16,这里是依赖项:

// package.json
{
  "version": "1.0.0",
  "private": true,
  "engines": {
    "node": ">= 0.10.0"
  },
  "author": "",
  "license": "MIT",
  "devDependencies": {
    "broccoli-asset-rev": "^2.2.0",
    "chart.js": "2.2.1",
    "ember-ajax": "0.7.1",
    "ember-browserify": "1.1.13",
    "ember-cli": "2.4.2",
    "ember-cli-app-version": "^1.0.0",
    "ember-cli-autoprefixer": "0.6.0",
    "ember-cli-babel": "^5.1.5",
    "ember-cli-chart": "3.1.0",
    "ember-cli-chartjs": "2.3.1",
    "ember-cli-dependency-checker": "^1.2.0",
    "ember-cli-htmlbars": "^1.3.5",
    "ember-cli-htmlbars-inline-precompile": "^0.3.1",
    "ember-cli-inject-live-reload": "^1.10.2",
    "ember-cli-moment-shim": "2.2.0",
    "ember-cli-qunit": "^1.2.1",
    "ember-cli-release": "0.2.8",
    "ember-cli-sass": "5.3.0",
    "ember-cli-spinjs": "1.0.8",
    "ember-cli-sri": "^2.1.0",
    "ember-cli-uglify": "^1.2.0",
    "ember-cookies": "0.0.9",
    "ember-data": "^2.18.5",
    "ember-disable-proxy-controllers": "^1.0.2",
    "ember-export-application-global": "^1.0.4",
    "ember-load-initializers": "^0.5.0",
    "ember-models-table": "1.11.0",
    "ember-moment": "7.0.0-beta.3",
    "ember-pikaday": "2.1.0",
    "ember-power-select": "1.0.0-beta.14",
    "ember-resolver": "^2.0.3",
    "ember-rl-year-picker": "^0.2.0",
    "liquid-fire": "0.24.0",
    "loader.js": "^4.0.0",
    "semantic-ui-ember": "2.0.0-beta.0"
  },
  "dependencies": {
    "ember-colpick": "^0.6.2",
    "findup": "^0.1.5",
    "semantic-ui-icon": "^2.3.3"
  }
}
// bower.json
{
  "dependencies": {
    "ember": "~2.7",
    "ember-cli-shims": "0.1.0",
    "ember-cli-test-loader": "0.2.2",
    "ember-qunit-notifications": "0.1.0",
    "hammerjs": "^2.0.6",
    "matchMedia": "0.2.0",
    "semantic-ui": "^2.2.4",
    "chartjs": "2.1.6",
    "spin.js": "^2.3.2",
    "mjolnic-bootstrap-colorpicker": "^2.3.6",
    "colpick": "2.0.2",
    "pikaday": "^1.4.0"
  },
  "devDependencies": {
    "js-cookie": "^2.1.2"
  }
}

是的,该项目使用 bower 和 npm,不知道为什么。

知道这个,我有一些问题:

项目比较大,尽量避免用vuejs重新制作。

并回答“为什么要升级 ember ?”,嗯,节点 6 很糟糕。我们至少需要节点 12

每个版本都可以升级!但最安全的方法可能是从 LTS 遍历到 LTS。

所以,2.4 -> 2.8 -> 2.12 -> 2.16 -> 2.18 -> 3.4 -> 3.8 -> 3.12 -> 3.16 > 3.20 -> 3.24 -> 3.28

More information about Releases here

这听起来工作量很大,但这就是跟上升级的步伐如此重要的原因。 (实际上可能没有那么多工作,具体取决于您的应用程序的大小,以及您对新功能分心的程度)

每一步的总体策略是:

  • 有一个好的测试套件
  • 循环:
    • 确保在 运行 测试
    • 时记录了 0 个弃用
    • 在支持您的 ember 版本的同时,将所有库升级到它们可以达到的最高水平(这需要进行一些探索,但幸运的是,您没有很多 non-default 部门)
    • 将您的 ember-source 版本升级到下一个 LTS

尽管离开凉亭有点 non-standard(因为这是 one-time 的事情),但有一些博客文章可以帮助您:

2 倍发布博文:https://blog.emberjs.com/tag/version-2-x 3 倍发布博文:https://blog.emberjs.com/tag/version-3-x

通过阅读 2-x 博客文章,我找到了这个关于离开凉亭的迁移指南:https://github.com/ember-cli/ember-cli/releases/tag/v2.13.0-beta.1

  • 我可能会先尝试这样做,因为您可以执行上述的漂亮升级循环

但是,由于您正在考虑 Vue 中的 re-writing,因此在 Ember 4.2 中仅 re-write 可能更有意义——因为很多概念都转移了 (如果您不熟悉最新的 ember,我极力推荐 the tutorial,因为它很难登顶。

有关功能的完整列表,请访问此应用程序:https://upgrade.emberjs.com/changes?fromVersion=2.4&toVersion=4.2

(它说 运行 一些命令,我​​不会执行这些命令中的任何一个,早在 2.4 时)

为了在升级过程中获得更好的支持,我建议加入 ember 的 discord 服务器:https://discord.gg/emberjs