目錄
模組方法
首頁 web前端 前端問答 webpack支援es6嗎

webpack支援es6嗎

Jan 18, 2023 pm 07:01 PM
es6 webpack

webpack支援es6。 webpack 2支援原生的ES6模組語法,表示開發者無須額外引入babel這樣的工具,就可以使用import和export。但如果使用其他的ES6 特性,仍然需要引入babel工具。

webpack支援es6嗎

本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

模組方法


在 webpack 打包應用程式時,你可以選擇各種模組語法風格,包括 ES6,CommonJS 和 AMD。

儘管 webpack 支援多種模組語法,但我們還是建議盡量使用一致的語法,以此避免一些奇怪的行為和 bug。事實上,當距離最近的 package.json 檔案中包含值為 "module" 或 "commonjs" 的 "type" 欄位時,webpack 會啟用語法一致性檢查。請大家在閱讀前,注意此狀況:

  • 在 package.json 中為 .mjs 或 .js 設定 "type": "module"

    • #不允許使用CommonJS,例如,你不能使用require,module.exports 或exports

    • 當引入檔案時,強制編寫副檔名,例如,你應該使用import '. /src/App.mjs',而非import './src/App'(你可以透過設定Rule.resolve.fullySpecified 來停用此規則)

  • 在 package.json 中為 .cjs 或 .js 設定 "type": "commonjs"

    • import 和export 皆不可用

  • ##import 和export 皆不可用

    • 在 package.json 中為 .wasm 設定 "type": "module"
引入wasm 檔案時,必須撰寫檔案副檔名



ES6 (推薦)

webpack 2 支援原生的ES6 模組語法,表示你無須額外引入babel 這樣的工具,就可以使用import 和export。但請注意,如果使用其他的 ES6 特性,仍然需要引入 babel。 webpack 支援以下的方法:

import

透過 import 以靜態的方式導入另一個透過 export 導出的模組。

import MyModule from './my-module.js';
import { NamedExport } from './other-module.js';
登入後複製

Warning:

這裡的關鍵字是靜態的。在標準的 import 語句中,模組語句中不能以「具有邏輯或含有變數」的動態方式去引入其他模組。關於 import 的更多資訊和 import() 動態用法。 你也透過 import 來引入Data URI:

import 'data:text/javascript;charset=utf-8;base64,Y29uc29sZS5sb2coJ2lubGluZSAxJyk7';
import {
  number,
  fn,
} from 'data:text/javascript;charset=utf-8;base64,ZXhwb3J0IGNvbnN0IG51bWJlciA9IDQyOwpleHBvcnQgY29uc3QgZm4gPSAoKSA9PiAiSGVsbG8gd29ybGQiOw==';
登入後複製

export

預設為整個模組或具名導出模組。

// 具名导出
export var Count = 5;
export function Multiply(a, b) {
  return a * b;
}

// 默认导出
export default {
  // Some data...
};
登入後複製

import()

#function(string path):Promise

## 動態的加載模組。呼叫 import 的之處,被視為分割點,意思是,被請求的模組和它引用的所有子模組,會分割到一個單獨的 chunk 中。

Tip:

ES2015 Loader 規格 定義了 import() 方法,可以在執行時間動態地載入 ES2015 模組。

if (module.hot) {
  import('lodash').then((_) => {
    // Do something with lodash (a.k.a '_')...
  });
}
登入後複製

Warning:

import() 特性依賴內建的 Promise。如果想要在低版本瀏覽器中使用 import(),記得使用像 es6-promise 或 promise-polyfill 這樣 polyfill 函式庫,來預先填入(shim) Promise 環境。

import() 中的表達式

#不能使用完全動態的 import 語句,例如 import(foo)。是因為 foo 可能是系統或專案中任何檔案的任何路徑。

import() 必須至少包含一些關於模組的路徑資訊。打包可以限定於一個特定的目錄或檔案集,以便於在使用動態表達式時 - 包括可能在 import() 呼叫中請求的每個模組。例如, import(`./locale/${language}.json`) 會把 .locale 目錄中的每個 .json 檔案打包到新的 chunk 中。在執行時,計算完變數 language 後,就可以使用像 english.json 或 german.json 的任何檔案。

// 想象我们有一个从 cookies 或其他存储中获取语言的方法
const language = detectVisitorLanguage();
import(`./locale/${language}.json`).then((module) => {
  // do something with the translations
});
登入後複製

Tip:

使用 webpackInclude and webpackExclude 選項可讓你新增正規表示式模式,以減少 webpack 打包導入的檔案數量。

Magic Comments

內嵌註解使此特性得以實現。透過在 import 中新增註釋,我們可以進行諸如給 chunk 命名或選擇不同模式的操作。

// 单个目标
import(
  /* webpackChunkName: "my-chunk-name" */
  /* webpackMode: "lazy" */
  /* webpackExports: ["default", "named"] */
  'module'
);

// 多个可能的目标
import(
  /* webpackInclude: /\.json$/ */
  /* webpackExclude: /\.noimport\.json$/ */
  /* webpackChunkName: "my-chunk-name" */
  /* webpackMode: "lazy" */
  /* webpackPrefetch: true */
  /* webpackPreload: true */
  `./locale/${language}`
);
登入後複製
import(/* webpackIgnore: true */ 'ignored-module.js');
登入後複製

webpackIgnore

:設定為 true 時,停用動態導入解析。

###Warning:######注意:將 webpackIgnore 設為 true 則不進行程式碼分割。 ###

webpackChunkName: 新 chunk 的名稱。從 webpack 2.6.0 開始,佔位符 [index] 和 [request] 分別支援遞增的數字或實際的解析檔名。新增此註解後,將單獨的給我們的 chunk 命名為 [my-chunk-name].js 而不是 [id].js。

webpackMode:從 webpack 2.6.0 開始,可以指定以不同的模式解析動態導入。支援以下選項:

  • 'lazy' (預設值):為每個import() 匯入的模組產生一個可延遲載入(lazy-loadable)的chunk。

  • 'lazy-once':產生一個可以滿足所有 import() 呼叫的單一可延遲載入(lazy-loadable)的 chunk。此 chunk 將在第一次 import() 時呼叫時獲取,隨後的 import() 則使用相同的網路回應。請注意,這種模式僅在部分動態語句中有意義,例如 import(`./locales/${language}.json`),其中可能含有多個被要求的模組路徑。

  • 'eager':不會產生額外的 chunk。所有的模組都被當前的 chunk 引入,並且沒有額外的網路請求。但仍會回傳一個 resolved 狀態的 Promise。與靜態導入相比,在呼叫 import() 完成之前,該模組不會被執行。

  • 'weak':嘗試載入模組,如果該模組函數已經以其他方式加載,(即另一個chunk 導入過此模組,或包含模組的腳本被載入)。仍會傳回 Promise, 但只有在客戶端上已經有該 chunk 時才會成功解析。如果該模組不可用,則傳回 rejected 狀態的 Promise,且網路請求永遠不會執行。當需要的 chunks 始終在(嵌入在頁面中的)初始請求中手動提供,而不是在應用程式導航在最初沒有提供的模組導入的情況下觸發,這對於通用渲染(SSR)是非常有用的。

webpackPrefetch:告訴瀏覽器未來可能需要該資源來進行某些導航跳轉。

webpackPreload:告訴瀏覽器在目前導航期間可能需要該資源。

webpackInclude:在導入解析(import resolution)過程中,用於匹配的正規表示式。只有匹配到的模組才會被打包。

webpackExclude:在導入解析(import resolution)過程中,用於匹配的正規表示式。所有符合的模組都不會被打包。

webpackExports: 告知 webpack 只建構指定出口的動態 import() 模組。它可以減少 chunk 的大小。從 webpack 5.0.0-beta.18 起可用。

【相關推薦:javascript學習教學

#

以上是webpack支援es6嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VUE3入門教學:使用Webpack進行打包和構建 VUE3入門教學:使用Webpack進行打包和構建 Jun 15, 2023 pm 06:17 PM

Vue是一款優秀的JavaScript框架,它可以幫助我們快速建立互動性強、高效性好的Web應用程式。 Vue3是Vue的最新版本,它引入了許多新的功能和功能。 Webpack是目前最受歡迎的JavaScript模組打包器和建置工具之一,它可以幫助我們管理專案中的各種資源。本文就為大家介紹如何使用Webpack打包和建構Vue3應用程式。 1.安裝Webpack

async是es6還是es7的 async是es6還是es7的 Jan 29, 2023 pm 05:36 PM

async是es7的。 async和await是ES7中新增內容,是對於非同步操作的解決方案;async/await可以說是co模組和生成器函數的語法糖,用更清晰的語意解決js非同步程式碼。 async顧名思義是「非同步」的意思,async用於聲明一個函數是異步的;async和await有一個嚴格規定,兩者都離不開對方,且await只能寫在async函數中。

ES6怎麼求數組反轉 ES6怎麼求數組反轉 Oct 26, 2022 pm 06:19 PM

在ES6中,可以利用數組物件的reverse()方法來實現數組反轉,該方法用於顛倒數組中元素的順序,將最後一個元素放在第一位,而第一個元素放在最後,語法「array.reverse()」。 reverse()方法會修改原始數組,如果不想修改需要配合擴充運算子「...」使用,語法「[...array].reverse()」。

vite和webpack的差別是什麼 vite和webpack的差別是什麼 Jan 11, 2023 pm 02:55 PM

差異:1、webpack伺服器啟動速度比vite慢;由於vite啟動的時候不需要打包,也就不需要分析模組依賴、編譯,所以啟動速度非常快。 2.vite熱更新比webpack快;vite在HRM方面,當某個模組內容改變時,就讓瀏覽器去重新請求該模組即可。 3.vite用esbuild預先建置依賴,而webpack基於node。 4.vite的生態不如webpack,載入器、插件不夠豐富。

小程式為什麼要將es6轉es5 小程式為什麼要將es6轉es5 Nov 21, 2022 pm 06:15 PM

為了瀏覽器相容。 ES6作為JS的新規範,加入了許多新的語法和API,但現代瀏覽器對ES6新特性支援不高,所以需將ES6程式碼轉換為ES5程式碼。在微信web開發者工具中,會預設使用babel將開發者ES6語法程式碼轉換為三端都能很好支援的ES5的程式碼,幫助開發者解決環境不同所帶來的開發問題;只需要在專案中配置勾選好「ES6轉ES5」選項即可。

es6怎麼找出2個數組中不同項 es6怎麼找出2個數組中不同項 Nov 01, 2022 pm 06:07 PM

步驟:1、將兩個陣列分別轉換為set類型,語法「newA=new Set(a);newB=new Set(b);」;2、利用has()和filter()求差集,語法“ new Set([...newA].filter(x =>!newB.has(x)))”,差集元素會被包含在一個set集合中返回;3、利用Array.from將集合轉為數組類型,語法“Array.from(集合)”。

es5和es6怎麼實現陣列去重 es5和es6怎麼實現陣列去重 Jan 16, 2023 pm 05:09 PM

es5中可以利用for語句和indexOf()函數來實現數組去重,語法“for(i=0;i<數組長度;i++){a=newArr.indexOf(arr[i]);if(a== -1){...}}」。在es6中可以利用擴充運算子、Array.from()和Set來去重;需要先將陣列轉為Set物件來去重,然後利用擴充運算子或Array.from()函數來將Set物件轉回數組即可。

如何使用PHP和webpack進行模組化開發 如何使用PHP和webpack進行模組化開發 May 11, 2023 pm 03:52 PM

隨著Web開發技術的不斷發展,前後端分離、模組化開發已成為了廣泛的趨勢。 PHP作為一種常用的後端語言,在進行模組化開發時,我們需要使用一些工具來實現模組的管理和打包,其中webpack是一個非常好用的模組化打包工具。本文將介紹如何使用PHP和webpack進行模組化開發。一、什麼是模組化開發模組化開發是指將程式分解成不同的獨立模組,每個模組都有自己的作

See all articles