ember-es6-class-codemod-dyfactor
是一个针对 Ember.js 应用程序的 ES6 类转换codemod。本教程将会帮助你了解如何使用它来升级你的 Ember.js 应用程序到 ES6 类语法。
什么是 ES6 类
ES6 类是一种新的基于原型继承的语法,它引入了一种使用 class
关键字和构造函数来定义类的方式,用于替代ES5 中的 构造函数/原型模式
。
安装
在使用 ember-es6-class-codemod-dyfactor
进行代码转换之前需要安装以下组件:
- Node.js
- npm
- Ember-CLI
安装好以上三个工具后,进入你的项目根目录,运行以下命令来安装 ember-es6-class-codemod-dyfactor
:
npm install -g ember-es6-class-codemod-dyfactor
使用
ember-es6-class-codemod-dyfactor
需要被调用两次来进行完整转换。 第一次调用用于转换文件中 extend
和 create
属性到 class
语法。第二次调用用于修复每一个类中的注释、 super()
调用以及属性定义。
第一步: 找出使用了 extend
和 create
关键字的文件:
使用以下命令来找出所有使用 extend
和 create
关键字的文件:
find app -name "*.js" | xargs grep -li 'extend(' | xargs grep -li 'create('
上述命令会输出所有符合条件的文件路径,如下:
app/components/my-component.js
第二步: 使用 js-codemods
库进行代码转换
ember-es6-class-codemod-dyfactor
工具是基于 js-codemods
库的,使用该库可以轻松把你现有的代码转换成 ES6 类语法。先使用下面这个命令启动第一次转换:
jscodeshift -t https://raw.githubusercontent.com/ember-codemods/ember-es6-class-codemod/master/transforms/prototype-extensions-to-classes.js app/components/my-component.js
执行完上述命令后,所有使用 extend
和 create
关键字的文件都被转换了,但是一些这些文件内部的类定义中没有被转换。 这时候你需要使用下述命令来修复所有存在问题的类定义:
jscodeshift -t https://raw.githubusercontent.com/ember-codemods/ember-es6-class-codemod/master/transforms/prototype-to-class.js app/components/my-component.js
示例代码
原始代码:
-- -------------------- ---- ------- -- ------------------------------ ------ ----- ---- -------- ------ ------- ------------------------ -------- --------- ----------- ------- --------------- ------ ----------- ---------------------------- - ---展开代码
转换后的代码:
-- -------------------- ---- ------- -- ------------------------------ ------ ----- ---- -------- ------ ------- ----- ----------- ------- --------------- - ------- - --------- ---------- - ------- --------------- ------- - ---------------------------- - -展开代码
总结
使用 ember-es6-class-codemod-dyfactor
可以轻松帮助你将你的 Ember.js 应用程序升级到 ES6 类语法。 我们建议你在使用 ember-es6-class-codemod-dyfactor
之前先使用 git
等版本控制工具对你的代码进行备份,以避免不可逆的损失。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600671d130d09270238229a7