目標

Webpack 可以針對多個環境或目標進行編譯。如要詳細了解什麼是target,請閱讀目標概念頁面

target

字串 [字串] false

指示 webpack 為特定環境產生執行時期程式碼。請注意,webpack 執行時期程式碼與您編寫的使用者程式碼不同,如果您想針對特定環境,您應該使用 Babel 等轉譯器轉譯這些程式碼,例如,您的原始程式碼中有箭頭函式,且您想在 ES5 環境中執行已套件的程式碼。Webpack 沒有辦法在設定了target的情況下自動轉譯這些程式碼。

預設為 'browserslist' 或是在找不到 browserslist 設定時為 'web'

字串

以下字串值透過 WebpackOptionsApply 獲得支援

選項說明
async-node[[X].Y]編譯以用於類似 Node.js 的環境(使用 fsvm 非同步載入區塊)
electron[[X].Y]-main編譯以用於 Electron 的主程序。
electron[[X].Y]-renderer編譯以用於 Electron 的渲染程序,提供一個使用 JsonpTemplatePluginFunctionModulePlugin(用於瀏覽器環境)和 NodeTargetPluginExternalsPlugin(用於 CommonJS 和 Electron 內建模組)的目標。
electron[[X].Y]-preload編譯以用於 Electron 的渲染程序,提供一個使用 NodeTemplatePlugin(將 asyncChunkLoading 設為 true)、FunctionModulePlugin(用於瀏覽器環境)和 NodeTargetPluginExternalsPlugin(用於 CommonJS 和 Electron 內建模組)的目標。
node[[X].Y]編譯以用於類似 Node.js 的環境(使用 Node.js require 載入區塊)
node-webkit[[X].Y]編譯以用於 WebKit,並使用 JSONP 載入區塊。允許匯入內建的 Node.js 模組和 nw.gui(實驗性質)
nwjs[[X].Y]node-webkit 相同
web編譯以用於類似瀏覽器的環境 (預設)
webworker編譯為 WebWorker
esX編譯為指定的 ECMAScript 版本。範例:es5、es2020。
browserslist從 browserslist-config 推斷平台和 ES 功能 (如果 browserslist config 可用,則為預設)

例如,當 target 設為 "electron-main" 時,webpack 會包含多個特定於 electron 的變數。

可以選擇指定 nodeelectron 的版本。這在上表中以 [[X].Y] 表示。

webpack.config.js

module.exports = {
  // ...
  target: 'node12.18',
};

它有助於確定可能用於產生執行時期程式碼的 ES 功能(所有區塊和模組都由執行時期程式碼包裝)。

browserslist

如果專案有 browserslist 設定檔,webpack 將會用於

  • 確定可能用於產生執行時期程式碼的 ES 功能。
  • 推斷環境(例如:最後 2 個節點版本target: "node" 相同,並帶有一些 output.environment 設定)。

支援的 browserslist 值

  • browserslist - 使用自動解析的 browserslist 設定檔和環境(來自最近的 package.jsonBROWSERSLIST 環境變數,請參閱 browserslist 文件 以取得詳細資訊)
  • browserslist:modern - 使用自動解析的 browserslist 設定檔中的 modern 環境
  • browserslist:last 2 versions - 使用明確的 browserslist 查詢(將會忽略設定檔)
  • browserslist:/path/to/config - 明確指定 browserslist 設定檔
  • browserslist:/path/to/config:modern - 明確指定 browserslist 設定檔和環境

[字串]

如果傳遞多個目標,將會使用功能的共同子集

webpack.config.js

module.exports = {
  // ...
  target: ['web', 'es5'],
};

Webpack 將會為 Web 平台產生執行時期程式碼,而且只會使用 ES5 功能。

目前並非所有目標都能夠混合。

webpack.config.js

module.exports = {
  // ...
  target: ['web', 'node'],
};

將會造成錯誤。Webpack 目前不支援通用目標。

false

如果上述清單中沒有任何預先定義的目標符合您的需求,請將 target 設定為 false,不會套用任何外掛程式。

webpack.config.js

module.exports = {
  // ...
  target: false,
};

或者你可以套用你想要的特定外掛

webpack.config.js

const webpack = require('webpack');

module.exports = {
  // ...
  target: false,
  plugins: [
    new webpack.web.JsonpTemplatePlugin(options.output),
    new webpack.LoaderTargetPlugin('web'),
  ],
};

當沒有提供關於目標或環境功能的資訊時,ES2015 將會被使用。

10 貢獻者

juanglsokraskipjackSpaceK33zpastelskytbroadleybyzykEugeneHlushkosmelukovchenxsan