前端JS進階一(ES6-模塊化)

模塊化語法

export語法
/*util1.js*/
  export default{
    a:100
  }

/*util2.js*/
  export function fn1(){
    alert('fn1')
  }
  export function fn2(){
    alert('fn2')
  }
import語法
/*index.js*/
  import util1 from './util1.js'
  import {fn1,fn2} from './util2.js'
  console.log(util1)
  fn1
  fn2

模塊化-babel

Babel 通過語法轉換來支持最新版本的 JavaScript (ES6),而不用等待瀏覽器的支持。

配置babel的開發(fā)環(huán)境
  • 電腦有 node 環(huán)境,運行 npm init
  • npm install --save-dev babel-core babel-preset-es2015 babel-preset-latest
  • 創(chuàng)建 .babelrc 文件
  • npm install --global babel-cli (需要管理員權限)
  • babel —version
  • 創(chuàng)建 index.js
  • 內容:[1, 2, 3].map(item => item + 1);
  • 運行 babel index.js
//.babelrc 本質是個json
  {
    "presets":["es2015","latest"]
    "plugins":[]
  }

//index.js
  [1, 2, 3].map(item => item + 1);
配置webpack的開發(fā)環(huán)境
  • npm install webpack babel-loader --save-dev
  • 配置 webpack.config.js
  • 配置 package.json 中的 scripts
  • 運行 npm start
//webpack.config.js
  module.exports = {
      entry: './src/index.js',  //入口
      output: {  //出口
          path: __dirname, //當前目錄
          filename: './build/bundle.js' //編譯出的文件
      },
      module: { //定義模塊
          rules: [{
              test: /\.js?$/,  //所有的.js結尾的
              exclude: /(node_modules)/,  //除了node_modules目錄
              loader: 'babel-loader' //通過babel-loader來編譯
          }]
      }
  }

//package.json
  "scripts": {
    "start": "webpack",
    "test": "echo \"Error: no test specified\" && exit 1"
  }

rollup

配置rollup的開發(fā)環(huán)境
  • npm init
  • npm i rollup rollup-plugin-node-resolve rollup-plugin-babel babel-plugin-external-helpers babel-pres
  • 配置 .babelrc
  • 配置 rollup.config.js
  • 將 webpack 環(huán)境的 JS 代碼拷貝過來
  • 修改 package.json 的 scripts
  • 運行 npm start
rollup特點
  • rollup 功能單一,webpack 功能強大
  • 參考設計原則和《Linux/Unix設計思想》
  • 功能單一,可集成,可擴展
//.babelrc
  {
    "presets": [
        ["latest", {
            "es2015": {
                "modules": false  //不打包第三方插件
            }
        }]
    ],
    "plugins": ["external-helpers", "babel-plugin-transform-regenerator"]
  }

//rollup.config.js
  import babel from 'rollup-plugin-babel'
  import resolve from 'rollup-plugin-node-resolve'
  export default {
      entry: 'src/index.js',  //入口
      format: 'umd',   //umd兼容AMD和CommonJS
      plugins: [
          resolve(),
          babel({
              exclude: 'node_modules/**'  //排除node_modules
          })
      ],
      dest: 'build/bundle.js'  //打包目錄
  }

//package.json
    "scripts": {
      "start": "rollup -c rollup.config.js"
    },

關于JS眾多模塊化標準

  • 沒有模塊化
  • AMD 成為標準,require.js (也有 CMD)
  • 前端打包工具出現(xiàn), nodejs 模塊化可以被使用(CommonJS)
  • ES6 出現(xiàn),想統(tǒng)一現(xiàn)在所有模塊化標準。nodejs 積極支持,瀏覽器尚未統(tǒng)一。

總結

  • 語法:import export(注意有無default)
  • 環(huán)境:babel編譯ES6語法,模塊化用webpack和rollup
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容