摘要:如使用插件為我們自動生成一個文件。安裝使用生產和開發構建分離生產和開發中的構建肯定是不同,生產中側重于一個更好的開發體驗,而生產環境中則需要更多的性能優化,更小的。可以指定命令運行以來的配置文件,通過在中寫入是一種不錯的方式。
原文地址:https://github.com/huruji/blog/issues/3
入口單文件入口
指定entry鍵值
const config = { entry: "./yourpath/file.js" }; module.exports = config
上面的是以下的簡寫:
const config = { entry: { main: "./yourpath/file.js" } }; module.exports = config
多文件入口
對entry采用對象寫法,指定對應的鍵值對,為了輸出這多個文件可以使用占位符
const path = require("path"); const config = { entry: { app1: "./src/main.js", app2: "./src/app.js" }, output: { filename: "[name].bundle.js", path: path.join(__dirname, "dist") } }; module.exports = config;輸出
指定打包構建之后輸出的文件
單文件輸出
指定output鍵值,值為對象,對象中指定path和filename
const path = require("path"); const config = { output: { filename: "bundle.js", path: path.join(__dirname, "dist") } }; module.exports = config;
多文件輸出
使用占位符,輸出文件將按照多文件入口指定的鍵來替代占位符
const path = require("path"); const config = { entry: { app1: "./src/main.js", app2: "./src/app.js" }, output: { filename: "[name].bundle.js", path: path.join(__dirname, "dist") } }; module.exports = config;Loader
Loader可以在加載模塊時預處理文件,類似于gulp中的task。配置loader需要在module選項下指定對應后綴名相應的rules,使用test正則指定后綴名,使用use指定相應的loader
允許在js中import css
需要使用style-loader和css-loader,首先需要安裝:
npm i css-loader style-loader --save-dev
使用loader
const path = require("path"); const config = { entry: "./src/main.js", output: { filename: "bundle.js", path: path.join(__dirname, "dist") }, module: { rules: [{ test: /.css$/, use: [ "style-loader", "css-loader" ] }] } }; module.exports = config;
模塊文件寫法:
import "./css/main.css"
允許加載圖片
需要使用file-loader,首先安裝:
npm i file-loader --save-dev
使用:
const path = require("path"); const config = { entry: "./src/main.js", output: { filename: "bundle.js", path: path.join(__dirname, "dist") }, module: { rules: [{ test: /.(png|jpg|svg|gif)$/, use: [ "file-loader" ] }] } }; module.exports = config;
模塊文件寫法:
import logo from "./image/logo.svg";插件
插件的目的在于解決loader解決不了的事情,使用插件指定plugins選項即可,需要注意的使用插件需要引入插件。如使用HtmlWebpackPlugin插件為我們自動生成一個html文件。
首先安裝:
npm i --save-dev html-webpack-plugin
配置webpack
const path = require("path"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const config = { entry: "./src/main.js", output: { filename: "bundle.js", path: path.join(__dirname, "dist") }, module: { rules: [{ test: /.css$/, use: [ "style-loader", "css-loader" ] },{ test: /.(png|jpg|svg|gif)$/, use: [ "file-loader" ] }] }, plugins: [ new HtmlWebpackPlugin({ title: "我的webpack" }) ] }; module.exports = config;使用source map
源代碼被webpack打包之后,會很難追蹤到原始的代碼的位置,使用source map功能,可以將編譯后的代碼映射回原始代碼位置,指定devtool選項即可:
const config = { // .... devtool: "inline-source-map" }; module.exports = config;使用webpack-dev-server
webpack-dev-server提供了一個簡單的web服務器,并能夠實時重新加載使用webpack需要先安裝:
npm i --save-dev webpack-dev-server
在配置文件中指定devServer選項,告訴服務器在哪里尋找文件
const config = { // .... devServer: { contentBase: "./dist" } }; module.exports = config;
使用命令行運行命令或者在package.json中指定scripts
webpack-dev-server --open
此時服務將運行在8080端口,其中open選項表示服務開啟之后立即在默認瀏覽器中打開頁面。
開啟熱更新開啟熱更新很簡單,只需要更新webpack-dev-server配置,增加hot選項,同時使用webpack自帶的HMR插件
const config = { // .... devServer: { contentBase: "./dist", hot:true }, plugins: [ new webpack.HotModuleReplacementPlugin() ] }; module.exports = config;精簡輸出
在實際中是開發中可能有些模塊的方法并沒有被使用,也就是說,在開發中這些方法并沒有被import,這些沒有被使用的代碼應該被刪除的,使用uglifyjs-webpack-plugin插件可以幫助我們刪除這些代碼,同時做代碼混淆和壓縮。
安裝:
npm i -D uglifyjf-webpack-plugin
使用:
const UglifyJSPlugin = require("uglifyjs-webpack-plugin") const config = { // .... plugins: [ new UglifyJSPlugin() ] }; module.exports = config;生產和開發構建分離
生產和開發中的構建肯定是不同,生產中側重于一個更好的開發體驗,而生產環境中則需要更多的性能優化,更小的chunk。webpakck可以指定命令運行以來的配置文件,通過在package.json中寫入script是一種不錯的方式。而生產和開發中的配置肯定有很多重復的地方,使用webpack-merge可以合并通用配置
安裝:
npm i -D webpack-merge
webpack.common.js
const path = require("path"); const CleanWebpackPlugin = require("clean-webpack-plugin"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const config = { entry: "./src/main.js", plugins: [ new CleanWebpackPlugin(["dist"]), new HtmlWebpackPlugin({ title: "My App" }) ], output: { filename: "bundle.js", path: path.join(__dirname, "dist") }, } module.exports = config;
webpack.dev.js
const merge = require("webpack-merge"); const common = require("./webpack.common"); const config = merge(common, { devtool: "inline-source-map", devServer: { contentBase: "./dist" } }); module.exports = config;
webpack.prod.js
const merge = require("webpack-merge"); const UglifyJSPlugin = require("uglifyjs-webpack-plugin"); const common = require("./webpack.common"); const config = merge(common, { plugins: [ new UglifyJSPlugin() ] }); module.exports = config;
package.json
{ // ...... "scripts": { "start": "webpack-dev-server --open --config webpack.dev.js", "build": "webpack --config webpack.prod.js" }, // ...... }
許多lib通過與process.env.NODE_ENV環境關聯來決定lib中使用哪些內容,使用webpack內置的DefinePlugin可以為所有依賴指定這個變量。
const config = { // ...... plugins: [ new webpack.DefinePlugin({ "process.env": { "MODE_ENV": JSON.stringify("production") } }) ] // ...... }讓輸出的文件名帶有哈希值
讓文件名帶有hash可以方便在生產環境中用戶及時更新緩存,讓文件名帶有hash可以使用和構建相關的[hash]占位符,也可以使用與chunk相關的[chunkhash]占位符,通常后一種是更好的選擇
const config = { //...... output: { filename: [name].[chunkhash].js, path: path.join(__dirname, "dist") } // ...... }讓webpack不打包指定的lib
在開發中有些時候我們需要webpack不打包某些lib,這在我們開發lib的時候特別常見,比如我們為react開發插件,不希望打包的時候包含react。使用配置的external選項可以做到,
const config = { "externals": [ "react", "react-dom" ] }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85194.html
摘要:全局安裝安裝成功之后,現在命令就在全局生效。為了將依賴關系與捆綁到一起,我們需要導入。執行命令,入口文件為,輸出文件,其中未使用的依賴關系不會打入中。現在我們直接運行命令實現與上面相同的功能。 源碼地址:https://github.com/silence717/webpack2-demos webpack在你的應用中是一個模塊打包工具。webpack可以簡化工作流,快速構建一個應用...
摘要:例如現在的入門學習手記系列。收到粉絲留言和打賞的喜悅。安裝上一篇入門學習手記一,主要是介紹了的核心概念,是整個學習過程的基礎知識。新生成的類似如下入門學習手記因為生成的內容過多,我直接省略掉了。 showImg(https://segmentfault.com/img/bVbk5Nd?w=1150&h=599); 本人微信公眾號:前端修煉之路,歡迎關注。 最近開始想要維護一個個人的公眾...
摘要:哈哈,我理解,架構就是骨架,如下圖所示譯年月個有趣的和庫前端掘金我們創辦的使命是讓你及時的了解開發中最新最酷的趨勢。 翻譯 | 上手 Webpack ? 這篇就夠了! - 掘金譯者:小 boy (滬江前端開發工程師) 本文原創,轉載請注明作者及出處。 原文地址:https://www.smashingmagazine.... JavaSrip... 讀 Zepto 源碼之代碼結構 - ...
摘要:前言月份開始出沒社區,現在差不多月了,按照工作的說法,就是差不多過了三個月的試用期,準備轉正了一般來說,差不多到了轉正的時候,會進行總結或者分享會議那么今天我就把看過的一些學習資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區,現在差不多9月了,按照工作的說法,就是差不多過了三個月的試用期,準備轉正了!一般來說,差不多到了轉正的時候,會進行總結或者分享會議!那么今天我就...
閱讀 2043·2023-04-25 15:24
閱讀 1583·2019-08-30 12:55
閱讀 1618·2019-08-29 15:27
閱讀 475·2019-08-26 17:04
閱讀 2411·2019-08-26 10:59
閱讀 1806·2019-08-26 10:44
閱讀 2203·2019-08-22 16:15
閱讀 2592·2019-08-22 15:36