webpack是一個網頁模塊打包工具,能夠將全部代碼、圖片、樣式打包在一塊兒,除此以外還有許多實用的功能。最近看了一個慕課學習了一下webpack的使用,在這裏作一下總結。css
本文不會涉及太多深刻的知識,只會講主要的幾個知識點。html
npm init myapp
cd myapp
npm i webpack
此時項目內已經有了node_modulese
和package.json
vue
這裏將使用一個Vue和webpack結合的項目來說解。
新建文件夾以下
webpack的主要使用方法我都在註釋裏寫的很清楚了。
webpack.config.jsnode
const path = require('path') //必須先導入這個包,用於管理路徑
const webpack = require('webpack')
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const HTMLPlugin = require('html-webpack-plugin');
const isDev = process.env.NODE_ENV === 'development'
const config = {
target: 'web',
entry: path.join(__dirname, 'src/index.js'), //配置入口文件路徑,這裏的__dirname爲系統變量,表示項目根目錄
output: { //配置build文件輸出路徑
filename: 'bundle.js',
path: path.join(__dirname, 'dist')
},
module: {
rules: [ //添加各個類型的loader,是一個數組
{
test: /\.vue$/, //採用正則來匹配文件類型
loader: require.resolve('vue-loader'), //選擇loader,通常名字都是filetype-loader,須要先用npm i 安裝對應的loader
options: {
}
}, {
test: /\.css$/,
use: [ //使用多個loader時使用use語句,按照從後往前的解析順序寫,這裏是先使用css-loader,再使用style-loader
'style-loader',
'css-loader'
]
}, {
test: /\.(gif|jpg|jpeg|png|svg)$/,
use: [
{
loader: 'url-loader',
options: { //使用options往loader裏面傳額外的參數
limit: 1024,
name: '[name]-aaa.[ext]'
}
}
]
}, {
test: /\.styl$/,
use: [
'style-loader',
'css-loader',
'stylus-loader'
]
}
]
},
plugins: [ //在這裏添加各類插件,這裏的插件都須要先在前面require
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: isDev ? '"development"' : '"production"'
}
}),
new HTMLPlugin(),
new VueLoaderPlugin()
]
}
if (isDev) { //判斷是不是在開發環境下進行配置
config.devtool = '#cheap-module-eval-source-map' //調試器,否則按F12只有一個打包後的代碼不利於調試
config.devServer = {
port: '8000', //設置端口
host: '0.0.0.0', //設置ip,推薦設置0.0.0.0而不是localhost,這樣的話就能夠在網頁上既能夠用localhost登陸也能夠在內網手機輸入ip登入
overlay: {
errors: true, //有錯誤時是否將錯誤在網頁顯示
},
open: true, //編譯完成自動用瀏覽器打開
historyApiFallback: true, //將一些錯誤地址或者沒有定義的地址跳轉,相似於Not Found 404
// hot: true //打開局部熱加載,由於後面使用了實時更新的功能,因此關閉熱加載
}
config.plugins.push(
new webpack.HotModuleReplacementPlugin(), //啓動熱加載功能須要添加的插件
new webpack.NoEmitOnErrorsPlugin() //減小一些沒必要要的調試信息展現問題
)
}
module.exports = config;
對應的須要在package.json
中的scripts
裏面添加如下代碼來指定webpack
"scripts": {
...
"build": "cross-env NODE_ENV=production webpack --config webpack.config.js",
"dev": "cross-env NODE_ENV=development· webpack-dev-server --config webpack.config.js" },