1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢(xún)
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
      Node中使用ES6語(yǔ)法的基礎(chǔ)教程

      相關(guān)背景介紹

      我們提供的服務(wù)有:做網(wǎng)站、網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、儀隴ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的儀隴網(wǎng)站制作公司

      我們現(xiàn)在大多數(shù)人用的語(yǔ)法javascript 其實(shí)版本是ecmscript5,也是就es5。這個(gè)版本己經(jīng)很多年了,且完美被各大瀏覽器所支持。所以很多學(xué)js的朋友可以一直分不清楚es5和javscript的關(guān)系。javascript是一門(mén)編程語(yǔ)言,那么它就會(huì)有版本,es5還是es6 就就是它的版本號(hào)。最新版es7己經(jīng)在緊鑼密布的進(jìn)行中,它最新的語(yǔ)法會(huì)讓我們寫(xiě)代碼更新的行云流水。

      引言

      Node本身已經(jīng)支持部分ES6語(yǔ)法,但是import export,以及async await(Node 8 已經(jīng)支持)等一些語(yǔ)法,我們還是無(wú)法使用。為了能使用這些新特性,我們就需要使用babel把ES6轉(zhuǎn)成ES5語(yǔ)法

      安裝babel

      npm install babel-cli -g

      基礎(chǔ)知識(shí)

      babel的配置文件是.babelrc

      {
       "presets": []
      }

      新建一個(gè)demo文件夾,文件夾下新建 1.js

      const arr = [1, 2, 3];
      arr.map(item => item + 1);

      同時(shí)新建.babelrc配置文件

      {
       "presets": []
      }

      終端運(yùn)行

      babel 1.js -o dist.js

      可以看見(jiàn),在文件夾下,新建了一個(gè)dist.js,這就是babel轉(zhuǎn)碼后的文件

      但是,dist.js目前是沒(méi)有任何變化的,因?yàn)槲覀冊(cè)谂渲梦募锩鏇](méi)有聲明轉(zhuǎn)碼規(guī)則,所以babel無(wú)法轉(zhuǎn)碼

      安裝轉(zhuǎn)碼插件

      npm install --save-dev babel-preset-es2015 babel-preset-stage-0

      修改配置文件

      {
       "presets": [
       "es2015",
       "stage-0"
       ]
      }

      es2015可以轉(zhuǎn)碼es2015的語(yǔ)法規(guī)則,stage-0可以轉(zhuǎn)碼ES7語(yǔ)法(比如async await)

      再次運(yùn)行終端

      babel 1.js -o dist.js

      可以看見(jiàn),箭頭函數(shù)被轉(zhuǎn)碼了

      var arr = [1, 2, 3];
      arr.map(function (item) {
       return item + 1;
      });

      我們?cè)囅耡sync await

      async function start() {
       const data = await test();
       console.log(data);
      }
      function test() {
       return new Promise((resolve, reject) => {
       resolve('ok');
       })
      }

      轉(zhuǎn)碼后的文件

      'use strict';
      var start = function () {
       var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
       var data;
       return regeneratorRuntime.wrap(function _callee$(_context) {
        while (1) {
        switch (_context.prev = _context.next) {
         case 0:
         _context.next = 2;
         return test();
      
         case 2:
         data = _context.sent;
      
         console.log(data);
      
         case 4:
         case 'end':
         return _context.stop();
        }
        }
       }, _callee, this);
       }));
       return function start() {
       return _ref.apply(this, arguments);
       };
      }();
      function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
      
      function test() {
       return new Promise(function (resolve, reject) {
       resolve('ok');
       });
      }

      再試下 import export

      util.js

      export default function say() {
       console.log('2333');
      }

      1.js

      import say from './util';
      say();

      這次,要把1.js和util.js都轉(zhuǎn)碼,我們可以把整個(gè)文件夾轉(zhuǎn)碼

      babel demo -d dist

      新生成的dist文件夾下,就有轉(zhuǎn)碼后的文件。可以看見(jiàn),轉(zhuǎn)碼后,仍然使用的是module.exportsCMD模塊加載

      babel-preset-env

      上面的轉(zhuǎn)碼其實(shí)有個(gè)缺陷,就是babel會(huì)默認(rèn)把所有的代碼轉(zhuǎn)成es5,這意味著,即使node支持let關(guān)鍵字,轉(zhuǎn)碼后,也會(huì)被轉(zhuǎn)成var

      我們可以使用babel-preset-env這個(gè)插件,它會(huì)自動(dòng)檢測(cè)當(dāng)前node版本,只轉(zhuǎn)碼node不支持的語(yǔ)法,非常方便

      npm install --save-dev babel-preset-env

      .babelrc

      {
       "presets": [
        ["env", {
        "targets": {
         "node": "current"
        }
        }]
       ]
       }

      1.js

      class F {
       say() {
        
       }
      }
      const a = 1;
      babel 1.js -o dist.js

      編譯出來(lái)后

      "use strict";
      class F {
       say() {}
      }
      const a = 1;

      可以看見(jiàn),class和const并沒(méi)有被轉(zhuǎn)碼,因?yàn)楫?dāng)前node版本(8.9.3)支持該語(yǔ)法

      在實(shí)際項(xiàng)目中使用ES6語(yǔ)法

      Koa2需要Node v7.6.0以上的版本來(lái)支持async語(yǔ)法,同時(shí),我們也想在Koa2中使用import模塊化寫(xiě)法

      npm install --save-dev babel-register
      npm install koa --save

      新建一個(gè)文件夾app

      util.js

      export function getMessage() {
       return new Promise((resolve, reject) => {
        resolve('Hello World!');
       })
      }

      app.js

      import Koa from 'koa';
      import { getMessage } from './util'
      const app = new Koa();
      app.use(async ctx => {
       const data = await getMessage();
       ctx.body = data;
      });
      app.listen(3000);

      如果直接啟動(dòng)文件,肯定會(huì)報(bào)錯(cuò)

      node app

      我們需要一個(gè)入口文件,來(lái)轉(zhuǎn)碼

      index.js

      require("babel-register");
      require("./app.js");
      node index

      訪問(wèn)http://localhost:3000/可以看見(jiàn)頁(yè)面了!

      babel-register是實(shí)時(shí)轉(zhuǎn)碼的,所以實(shí)際發(fā)布時(shí),應(yīng)該先把整個(gè)app文件夾轉(zhuǎn)碼

      babel app -d dist

      這次,只要啟動(dòng)dist下的app.js即可

      node app

      總結(jié)

      以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。


      網(wǎng)頁(yè)標(biāo)題:Node中使用ES6語(yǔ)法的基礎(chǔ)教程
      當(dāng)前網(wǎng)址:http://ef60e0e.cn/article/gcdjei.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        卢氏县| 龙州县| 姜堰市| 五原县| 梨树县| 柘荣县| 木里| 蓬安县| 城口县| 沭阳县| 焉耆| 许昌县| 大邑县| 秭归县| 南宁市| 柞水县| 芒康县| 吕梁市| 安新县| 金川县| 霍林郭勒市| 罗江县| 乌拉特后旗| 苏尼特左旗| 临桂县| 洪湖市| 靖州| 井陉县| 大新县| 肥东县| 大荔县| 佛坪县| 虎林市| 夹江县| 大姚县| 孟州市| 宾川县| 星子县| 多伦县| 和龙市| 景洪市|