Webpack4新手完全攻略
-
為了優化前端工程, 我們通常會將靜態檔案壓縮,減少頻寬佔用; 將靜態檔案合併,減少http請求, webpack可以輕易實現靜態檔案的壓縮合並以及打包的功能, 除此之外, webpack還支援眾多的loader外掛, 通過loader外掛可實現眾多型別(如vue, less, jpg, css)資源的打包
-
webpack的文件寫的相當出色, 為了方便讀者學習, 下面每一類配置的註釋裡, 都附上了參考的原文件地址, 如果以後配置更新了,也方便檢視更新的文件
-
如果不想自己配置, 可以直接拷貝最後的配置文件到自己的專案中, 所有的案例資源附在了文章末尾, 歡迎下載學習
新建專案start-webpack, 初始化npm
mkdir start-webpack
cd start-webpack
npm init -y
- 初始化後, npm自動建立npm配置檔案
通過npm, 安裝webpack
npm install -D webpack
# webpack4.0 需要 額外安裝webpack-cli
npm install -D webpack-cli
- 這裡的
-D
表示只在開發階段使用webpack, 最終打包上線的專案並不需要webpack
手動建立webpack配置檔案webpack.config.js
配置package.json
,自定義webpack打包命令 官方參考
- 執行命令
npm run webpack
, 進行打包, 獲得./dist/bundle.js
npm run webpack
- 測試打包效果
靜態檔案打包(以css, 圖片為例)
# 解決html的輸出到dist 參考: https://webpack.js.org/guides/output-management/
npm install -D html-webpack-plugin
# 增加對css的支援 參考: https://webpack.js.org/guides/asset-management/#loading-css
npm install -D style-loader css-loader
# 增加對圖片的支援 參考: https://webpack.js.org/guides/asset-management/#loading-images
npm install -D file-loader
支援less轉義打包
# 安裝 less-loader less 參考:https://webpack.js.org/loaders/less-loader/
npm install -D less-loader less
支援es6語法轉義
# es6語法轉義到es5 參考: https://webpack.js.org/loaders/babel-loader/
npm install "babel-loader@^8.0.0-beta" @babel/core @babel/preset-env
npm install @babel/plugin-transform-runtime --save-dev
npm install @babel/runtime --save
# 使用墊腳片polyfill, 將es6的api實現出來 參考: https://babeljs.io/docs/usage/polyfill/
npm install --save babel-polyfill
載入使用第三方包 (專案優化方案)
# 如果將vue打包到bundle.js會增大bundle.js的體積, 所以我們配置使用全域性的第三方包, 參考: https://webpack.js.org/configuration/externals/
npm install -S vue
支援vue.js打包
# 支援vue單檔案元件載入, 參考:https://vue-loader.vuejs.org/guide/
npm install -D vue-loader vue-template-compiler
支援自動打包, 支援熱過載
# 自動打包工具 參考: https://webpack.js.org/guides/development/
npm install -D webpack-dev-server
# 支援熱過載(vue子元件可無重新整理更新資料), 參考: https://webpack.js.org/guides/hot-module-replacement/#enabling-hmr
- 發包命令:
npm install --production
最終webpack.config.js配置檔案資訊:
const path = require(`path`);
const HtmlWebpackPlugin = require(`html-webpack-plugin`);
const { VueLoaderPlugin } = require(`vue-loader`);
const webpack = require(`webpack`);
module.exports = {
// 設定墊腳片,設定js入口
entry: [`babel-polyfill`, `./src/index.js`],
// 使用開發伺服器, 將服務執行在dist目錄中(其實是虛擬於記憶體中的)
// 為了解決第三方包的路徑問題, 我們將`./dist`改為`./`
devServer: {
// 設定虛擬目錄所在位置
// contentBase: `./dist`
contentBase: path.join(__dirname, "./"),
// 自動壓縮輸出的檔案
compress: true,
// 測試埠為 9000
port: 9000,
// 熱更新元件
hot: true
},
// 解決index.html輸出到dist的問題
plugins: [
new HtmlWebpackPlugin({
title: "主頁",
template: "./page.html"
}),
new VueLoaderPlugin(),
new webpack.NamedModulesPlugin(),
new webpack.HotModuleReplacementPlugin()
],
// 單獨 載入使用第三方包
externals: {
jquery: `jQuery`,
vue: `Vue`
},
// 設定 js 輸出位置
output: {
path: path.resolve(__dirname, `dist`),
filename: `bundle.js`
},
module: {
rules: [
// 解決載入css資源
{
test: /.css$/,
use: [
`style-loader`,
`css-loader`
]
},
// 解決載入圖片資源
{
test: /.(png|svg|jpg|gif)$/,
use: [
`file-loader`
]
},
// 解決載入 less資源
{
test: /.less$/,
use: [{
loader: `style-loader` // 3. 通過js 以內聯樣式 插入到頁面中
}, {
loader: `css-loader` // 2. 把css 轉化到 js
}, {
loader: `less-loader` // 1. 把less編譯成css
}]
},
// 解決es6轉為es5
{
test: /.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: `babel-loader`,
options: {
presets: [`@babel/preset-env`],
plugins: [`@babel/plugin-transform-runtime`]
}
}
},
// 支援vue的載入
{
test: /.vue$/,
loader: `vue-loader`
}
]
}
};
最終package.json
{
"name": "start-webpack",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "webpack",
"start": "webpack-dev-server --open"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.0.0-beta.46",
"@babel/plugin-transform-runtime": "^7.0.0-beta.46",
"babel-plugin-transform-runtime": "^6.23.0",
"css-loader": "^0.28.11",
"file-loader": "^1.1.11",
"html-webpack-plugin": "^3.2.0",
"less": "^3.0.2",
"less-loader": "^4.1.0",
"style-loader": "^0.21.0",
"vue-loader": "^15.0.0",
"vue-template-compiler": "^2.5.16",
"webpack": "^4.6.0",
"webpack-cli": "^2.0.15",
"webpack-dev-server": "^3.1.3"
},
"dependencies": {
"@babel/preset-env": "^7.0.0-beta.46",
"@babel/runtime": "^7.0.0-beta.46",
"babel-loader": "^8.0.0-beta.2",
"babel-polyfill": "^6.26.0",
"babel-runtime": "^6.26.0",
"vue": "^2.5.16"
}
}
結合以上配置, 用vue元件化的方式寫了一個簡單的頁面
教程涉及到的資源我都通過百度網盤分享給大家,為了便於大家的下載,資源整合到了一張獨立的帖子裡,連結如下:
http://www.jianshu.com/p/4f28e1ae08b1
相關文章
- generals.io 新手攻略
- 九陰真經新手必看1-30級入門攻略 九陰真經新手攻略
- Windows+Apache+mod_wsgi+Flask完全配置攻略WindowsApacheFlask
- Linux不完全攻略(轉)Linux
- [Flutter新手村]—除錯通關攻略Flutter除錯
- 《非常跳躍》 簡單攻略介紹 非常跳躍新手入門攻略
- 配置 containerd 映象倉庫完全攻略AI
- 新手快速上手webpack4打包工具的使用Web
- 陰陽師手遊新手教程 陰陽師手遊新手入門攻略詳解
- 新手學習如何完全退出整個應用
- [Flutter新手村] 入村攻略—前言和環境安裝Flutter
- Android應用整合Office檔案能力完全攻略Android
- 看完這本攻略,Canvas新手小白也可以建立驚人特效Canvas特效
- Fvwm新手入門不完全手冊(原創) (轉)
- Vue專案從webpack3.x升級webpack4不完全指南VueWeb
- puppet完全攻略(一)puppet應用原理及安裝部署
- 完全攻略Oracle資料庫的備份與恢復Oracle資料庫
- sybase-ase- 11.0.3.3安裝不完全攻略(轉)
- 巧萌易攜之ROS2Go的不完全教研攻略ROSGo
- LeetCode通關:連刷十四題,回溯演算法完全攻略LeetCode演算法
- Cozmo機器人脫離智慧手機使用的不完全攻略機器人
- 透明防火牆架設的完全攻略(bridge+iptables+squid)(轉)防火牆UI
- 自媒體新手入門攻略,學習乾貨內容瞭解運營技巧
- 設計小科普!給設計師的模組化設計新手完全入門指南
- 攻略
- webpack4 基礎?Web
- 詳談webpack4Web
- webpack4入門Web
- 玩轉webpack4Web
- Webpack4之SplitChunksPluginWebPlugin
- windows環境VS2015編譯TensorFlow C++程式完全攻略Windows編譯C++
- 阿里雲伺服器ECS配置及LAMP環境搭建及配置(新手攻略第一彈)阿里伺服器LAMP
- 阿里雲伺服器配置Jenkins自動打包部署vue專案(新手攻略第二彈)阿里伺服器JenkinsVue
- Webpack4那點事Web
- webpack4原始碼分析Web原始碼
- webpack4基礎配置Web
- Webpack4系列教程 --- 前言Web
- webpack4 系列教程: 前言Web