摘要:主要輸出文件的默認值是,其他生成文件默認放置在文件夾中。讓能夠去處理其他類型的文件,并將它們轉換為有效模塊,以供應用程序使用,以及被添加到依賴圖中。屬性,表示進行轉換時,應該使用哪個。
本質上,webpack 是一個現代 JavaScript 應用程序的靜態模塊打包工具。當 webpack 處理應用程序時,它會在內部構建一個 依賴圖(dependency graph),此依賴圖會映射項目所需的每個模塊,并生成一個或多個 bundle。
從 v4.0.0 開始,webpack 可以不用再引入一個配置文件來打包項目,然而,但它仍然有著 高度可配置性,可以很好滿足你的需求。
入口(entry)
輸出(output)
loader
插件(plugin)
模式(mode)
瀏覽器的兼容性(browser compatibility)
入口[entry]入口起點(entry point)指示 webpack 應該使用哪個模塊,來作為其內部依賴圖的開始。
默認值是 ./src/index.js,但你可以通過在 webpack configuration 中配置 entry 屬性,來指定一個(或多個)不同的入口起點。
webpack.config.js
module.exports = { entry: "./path/to/my/entry/file.js" };輸出[output]
output 屬性告訴 webpack 在哪里輸出它所創建的 bundle,以及如何命名這些文件。主要輸出文件的默認值是 ./dist/main.js,其他生成文件默認放置在 ./dist 文件夾中。
const path = require("path"); //可能你想要了解在代碼最上面導入的 path 模塊是什么,它是一個 Node.js 核心模塊,用于操作文件路徑。 module.exports = { entry: "./path/to/my/entry/file.js", output: { path: path.resolve(__dirname, "dist"), filename: "my-first-webpack.bundle.js" } };loader
webpack 只能理解 JavaScript 和 JSON 文件。loader 讓 webpack 能夠去處理其他類型的文件,并將它們轉換為有效 模塊,以供應用程序使用,以及被添加到依賴圖中。
在更高層面,在 webpack 的配置中 loader 有兩個屬性:
test 屬性,用于標識出應該被對應的 loader 進行轉換的某個或某些文件。
use 屬性,表示進行轉換時,應該使用哪個 loader。
const path = require("path"); module.exports = { output: { filename: "my-first-webpack.bundle.js" }, module: { rules: [ { test: /.txt$/, use: "raw-loader" } ] } };插件[plugin]
loader 用于轉換某些類型的模塊,而插件則可以用于執行范圍更廣的任務。包括:打包優化,資源管理,注入環境變量。
想要使用一個插件,你只需要 require() 它,然后把它添加到 plugins 數組中。多數插件可以通過選項(option)自定義。你也可以在一個配置文件中因為不同目的而多次使用同一個插件,這時需要通過使用 new 操作符來創建它的一個實例。
const HtmlWebpackPlugin = require("html-webpack-plugin"); // 通過 npm 安裝 const webpack = require("webpack"); // 用于訪問內置插件 module.exports = { module: { rules: [ { test: /.txt$/, use: "raw-loader" } ] }, plugins: [ new HtmlWebpackPlugin({template: "./src/index.html"}) ] };模式[mode]
通過選擇 development, production 或 none 之中的一個,來設置 mode 參數,你可以啟用 webpack 內置在相應環境下的優化。其默認值為 production。
module.exports = { mode: "production" };
const path = require("path"); module.exports = { mode: "production", // "production" | "development" | "none" // Chosen mode tells webpack to use its built-in optimizations accordingly. entry: "./app/entry", // string | object | array // 默認為 "./src" // 這里應用程序開始執行 // webpack 開始打包 output: { // webpack 如何輸出結果的相關選項 path: path.resolve(__dirname, "dist"), // string // 所有輸出文件的目標路徑 // 必須是絕對路徑(使用 Node.js 的 path 模塊) filename: "bundle.js", // string // 「入口分塊(entry chunk)」的文件名模板 publicPath: "/assets/", // string // 輸出解析文件的目錄,url 相對于 HTML 頁面 library: "MyLibrary", // string, // 導出庫(exported library)的名稱 libraryTarget: "umd", // 通用模塊定義 // 導出庫(exported library)的類型 /* 高級輸出配置(點擊顯示) */ }, module: { // 關于模塊配置 rules: [ // 模塊規則(配置 loader、解析器等選項) { test: /.jsx?$/, include: [ path.resolve(__dirname, "app") ], exclude: [ path.resolve(__dirname, "app/demo-files") ], // 這里是匹配條件,每個選項都接收一個正則表達式或字符串 // test 和 include 具有相同的作用,都是必須匹配選項 // exclude 是必不匹配選項(優先于 test 和 include) // 最佳實踐: // - 只在 test 和 文件名匹配 中使用正則表達式 // - 在 include 和 exclude 中使用絕對路徑數組 // - 盡量避免 exclude,更傾向于使用 include issuer: { test, include, exclude }, // issuer 條件(導入源) enforce: "pre", enforce: "post", // 標識應用這些規則,即使規則覆蓋(高級選項) loader: "babel-loader", // 應該應用的 loader,它相對上下文解析 // 為了更清晰,`-loader` 后綴在 webpack 2 中不再是可選的 // 查看 webpack 1 升級指南。 options: { presets: ["es2015"] }, // loader 的可選項 }, { test: /.html$/, use: [ // 應用多個 loader 和選項 "htmllint-loader", { loader: "html-loader", options: { /* ... */ } } ] }, { oneOf: [ /* rules */ ] }, // 只使用這些嵌套規則之一 { rules: [ /* rules */ ] }, // 使用所有這些嵌套規則(合并可用條件) { resource: { and: [ /* 條件 */ ] } }, // 僅當所有條件都匹配時才匹配 { resource: { or: [ /* 條件 */ ] } }, { resource: [ /* 條件 */ ] }, // 任意條件匹配時匹配(默認為數組) { resource: { not: /* 條件 */ } } // 條件不匹配時匹配 ], /* 高級模塊配置(點擊展示) */ }, resolve: { // 解析模塊請求的選項 // (不適用于對 loader 解析) modules: [ "node_modules", path.resolve(__dirname, "app") ], // 用于查找模塊的目錄 extensions: [".js", ".json", ".jsx", ".css"], // 使用的擴展名 alias: { // 模塊別名列表 "module": "new-module", // 起別名:"module" -> "new-module" 和 "module/path/file" -> "new-module/path/file" "only-module$": "new-module", // 起別名 "only-module" -> "new-module",但不匹配 "only-module/path/file" -> "new-module/path/file" "module": path.resolve(__dirname, "app/third/module.js"), // 起別名 "module" -> "./app/third/module.js" 和 "module/file" 會導致錯誤 // 模塊別名相對于當前上下文導入 }, /* 可供選擇的別名語法(點擊展示) */ /* 高級解析選項(點擊展示) */ }, performance: { hints: "warning", // 枚舉 maxAssetSize: 200000, // 整數類型(以字節為單位) maxEntrypointSize: 400000, // 整數類型(以字節為單位) assetFilter: function(assetFilename) { // 提供資源文件名的斷言函數 return assetFilename.endsWith(".css") || assetFilename.endsWith(".js"); } }, devtool: "source-map", // enum // 通過在瀏覽器調試工具(browser devtools)中添加元信息(meta info)增強調試 // 犧牲了構建速度的 `source-map" 是最詳細的。 context: __dirname, // string(絕對路徑!) // webpack 的主目錄 // entry 和 module.rules.loader 選項 // 相對于此目錄解析 target: "web", // 枚舉 // bundle 應該運行的環境 // 更改 塊加載行為(chunk loading behavior) 和 可用模塊(available module) externals: ["react", /^@angular//], // 不要遵循/打包這些模塊,而是在運行時從環境中請求他們 serve: { //object port: 1337, content: "./dist", // ... }, // 為 webpack-serve 提供選項 stats: "errors-only", // 精確控制要顯示的 bundle 信息 devServer: { proxy: { // proxy URLs to backend development server "/api": "http://localhost:3000" }, contentBase: path.join(__dirname, "public"), // boolean | string | array, static file location compress: true, // enable gzip compression historyApiFallback: true, // true for index.html upon 404, object for multiple paths hot: true, // hot module replacement. Depends on HotModuleReplacementPlugin https: false, // true for self-signed, object for cert authority noInfo: true, // only errors & warns on hot reload // ... }, plugins: [ // ... ], // 附加插件列表 /* 高級配置(點擊展示) */}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103097.html
摘要:安裝插件能幫忙每次打包之前先刪除文件夾。安裝插件提供了一種自定義編譯期間如何報告進度的方法。插件能創建環境變量開發與生產時的不同配置時使用選項設置不同的配置文件開發生產能夠為我們提供一個簡單的并且具有實時重新加載功能。 寫在前面,近期有想法整理一下前端工程化相關的知識,就先從打包工具開始吧;今天帶來的是webpack相關的一些常用插件配置,后期有時間話,也會出一些比較輕量級的打包工具的...
學習的過程中收藏了這些優秀教程和的項目,希望對你有幫助。 github地址, 有不錯的就更新 官方文檔 中文指南 初級教程 webpack-howto 作者:Pete Hunt Webpack 入門指迷 作者:題葉 webpack-demos 作者:ruanyf 一小時包教會 —— webpack 入門指南 作者:VaJoy Larn webpack 入門及實踐 作者:...
摘要:上一章我們了解了的編譯環境搭建項目構建二編譯環境搭建這一章我們會結合的,介紹本地測試服務器的搭建過程。三開發環境有一些特性是專門用于開發環境的,可以幫助我們搭建一個更好的開發環境。我們可以通過配合使用來搭建本地服務。 注:以下教程均在 windows 環境實現,使用其他操作系統的同學實踐過程可能會有些出入。 ??上一章我們了解了 webpack 的 ES6 編譯環境搭建:webpack...
摘要:資源哈希編碼使用可以為每個包的名稱注入一個哈希值例如,,以便在版本更新后使客戶端上舊版本的包無效重新下載。如此受人喜愛的原因之一是熱模塊更換。可以為文件名生成哈希值,在內容更改時,可以作廢瀏覽器緩存中上個版本的包。 原文鏈接:https://survivejs.com/webpack...翻譯計劃:https://segmentfault.com/a/11... 涉及到的未翻譯單詞 ...
摘要:同時不能直接單純的指定輸出的文件名稱,比如,將會報錯,可以換成以下方式指定,或者其他類似方式。如果打包過程出現錯誤,比如語法錯誤,將會在控制臺以紅色文字顯示,并且在你修復之后會再次打包。 0x001 概述 其實我不知道怎么寫,所以決定就一塊一塊的寫點平常配置的過程,根據不同東西稍微分區一下就好了 0x002 初始化項目結構 $ mkdir webpack_study $ cd webp...
摘要:入門什么是官網介紹是一個模塊打包器。處理帶有依賴關系的模塊,生成一系列表示這些模塊的靜態資源。。我們在當前項目根目錄下新建一個文件,為命令配置選項。引入生成的在瀏覽器中打開。我們刷新頁面,可以發現頁面發生了變化。 webpack 入門 1. 什么是webpack 官網介紹:webpack是一個模塊打包器。webpack 處理帶有依賴關系的模塊,生成一系列表示這些模塊的靜態資源。(web...
閱讀 2887·2021-11-15 11:39
閱讀 1513·2021-08-19 10:56
閱讀 1092·2019-08-30 14:12
閱讀 3730·2019-08-29 17:29
閱讀 718·2019-08-29 16:21
閱讀 3416·2019-08-26 12:22
閱讀 1515·2019-08-23 16:30
閱讀 1015·2019-08-23 15:25