ES6学习开始

ECMAScript和javascript的关系:
    ECMAScript是javascript的规格,javascript是ECMAScript的其中一种实现,使用 ECMAScript规范的还有Jscript和ActionScript。
兼容ES6:
    使用babel,jsx,traceur,es6-shim等转码器。
使用Babel:
1.全局安装:
     babel的配置文件是.babelrc(放在根目录下),用来配置转码规则和插件,基本格式为
   
  1. {
  2. "presets": [],    //转码规则
  3. "plugins": []
  4. }
    官方提供以下的规则集,根据需要安装
    
  1. # 最新转码规则
  2. $ npm install --save-dev babel-preset-latest
  3. # react 转码规则
  4. $ npm install --save-dev babel-preset-react
  5. # 不同阶段语法提案的转码规则(共有4个阶段),选装一个
  6. $ npm install --save-dev babel-preset-stage-0
  7. $ npm install --save-dev babel-preset-stage-1
  8. $ npm install --save-dev babel-preset-stage-2
  9. $ npm install --save-dev babel-preset-stage-3
  10. 语法提案的五个阶段:
  11. Stage 0 - Strawman(展示阶段)
  12. Stage 1 - Proposal(征求意见阶段)
  13. Stage 2 - Draft(草案阶段)
  14. Stage 3 - Candidate(候选人阶段)
  15. Stage 4 - Finished(定案阶段)
    规则加入.babelrc
    
  1. {
  2. "presets": [
  3. "latest",
  4. "react",
  5. "stage-2"
  6. ],
  7. "plugins": []
  8. }
    安装babel-cli
     
  1. 全局安装:
  2. $ npm install --global babel-cli
  3. 基本用法如下:
  4. # 转码结果输出到标准输出
  5. $ babel example.js
  6. # 转码结果写入一个文件
  7. # --out-file -o 参数指定输出文件
  8. $ babel example.js --out-file compiled.js
  9. # 或者
  10. $ babel example.js -o compiled.js
  11. # 整个目录转码
  12. # --out-dir -d 参数指定输出目录
  13. $ babel src --out-dir lib
  14. # 或者
  15. $ babel src -d lib
  16. # -s 参数生成source map文件
  17. $ babel src -d lib -s
2.将babel-cli安装在项目中:
     
  1. # 安装
  2. $ npm install --save-dev babel-cli
  3. #改写package.json
  4. {
  5. "devDependencies": {
  6. "babel-cli": "^6.0.0"
  7. },
  8. "scripts": {
  9. "build": "babel src -d lib"
  10. },
  11. }
  12. #转码
  13. $ npm run build
3.一些插件:
  • babel-node:提供ES6的REPL环境(“读取-求值-输出”循环 Read-Eval-Print Loop,是一个简单的,交互式的编程环境)
       使用:babel-node替代node,script.js不用做任何转码处理
      
  1. $ babel-node es6.js
  2. #也可以安装在项目中:
  3. $ npm install --save-dev babel-cli
  4. #改写package.json
  5. {
  6. "scripts": {
  7. "script-name": "babel-node script.js"
  8. }
  9. }
  • babel-register:使用require加载.js/.jsx/.es/.es6后缀名文件,就会先使用babel进行转码,而无需手动转码后再引入,但是babel-register只会对require的文件转码,不对当前文件转码,并且为实时转码,只适用于开发环境。
        
  1. #安装
  2. $ npm install --save-dev babel-register
  3. #加载babel-register
  4. require("babel-register");
  5. require("./index.js");
  • babel-core:使用babel的API进行转码时,需要使用babel-core模块
        
  1. #安装
  2. $ npm install babel-core --save
  3. #调用babel-core
  4. var babel = require('babel-core');
  5. // 字符串转码
  6. babel.transform('code();', options);
  7. // => { code, map, ast }
  8. // 文件转码(异步)
  9. babel.transformFile('filename.js', options, function(err, result) {
  10. result; // => { code, map, ast }
  11. });
  12. // 文件转码(同步)
  13. babel.transformFileSync('filename.js', options);
  14. // => { code, map, ast }
  15. // Babel AST转码
  16. babel.transformFromAst(ast, code, options);
  17. // => { code, map, ast }
4.浏览器环境:
  • babel6.0开始不直接提供浏览器版本,需要用构建工具构建出来,浏览器版本可以使用babel-standalone模块,但性能有影响:
     
  1. <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.4.4/babel.min.js"></script>
  2. <script type="text/babel">
  3. // Your ES6 code
  4. </script>
  • 代码打包成浏览器可以使用的版本(babel配合browserify):
      
  1. #安装babelify
  2. $ npm install --save-dev babelify babel-preset-latest
  3. #转换ES6脚本,将script.js转为bundle.js,浏览器直接加载bundle.js
  4. $ browserify script.js -o bundle.js \
  5. -t [ babelify --presets [ latest ] ]
  6. #package.json中配置参数,就不需要每次都输入参数了
  7. {
  8. "browserify": {
  9. "transform": [["babelify", { "presets": ["latest"] }]]
  10. }
  11. }
  • 在线转换器:
    babel提供的REPL在线编辑器:
     Traceur在线转码器:
使用Traceur
1.Traceur将ES6直接插入网页:
     
  1. <script src="https://google.github.io/traceur-compiler/bin/traceur.js"></script>
  2. <script src="https://google.github.io/traceur-compiler/bin/BrowserSystem.js"></script>
  3. <script src="https://google.github.io/traceur-compiler/src/bootstrap.js"></script>
  4. <script type="module">
  5. import './Greeter.js';
  6. </script>
2.Traceur命令行转换:
      
  1. #安装
  2. $ npm install -g traceur
  3. #将ES6转为ES5
  4. $ traceur --script calc.es6.js --out calc.es5.js --experimental
3.Traceur 的 Node用法:
      
  1. var traceur = require('traceur');
  2. var fs = require('fs');
  3. // 将ES6脚本转为字符串
  4. var contents = fs.readFileSync('es6-file.js').toString();
  5. var result = traceur.compile(contents, {
  6. filename: 'es6-file.js',
  7. sourceMap: true,
  8. // 其他设置
  9. modules: 'commonjs'
  10. });
  11. if (result.error)
  12. throw result.error;
  13. // result对象的js属性就是转换后的ES5代码
  14. fs.writeFileSync('out.js', result.js);
  15. // sourceMap属性对应map文件
  16. fs.writeFileSync('out.js.map', result.sourceMap);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值