1. 程式人生 > 其它 >webpack開發常用配置

webpack開發常用配置

webpack.config.js

/*
                webpack.config.js  webpack的配置檔案
                作用: 指示 webpack 幹哪些活(當你執行 webpack 指令時,會載入裡面的配置)

                所有構建工具都是基於nodejs平臺執行的~模組化預設採用commonjs。
                */

// resolve用來拼接絕對路徑的方法
const {
    resolve
} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin 
= require('mini-css-extract-plugin'); const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); const TerserPlugin = require("terser-webpack-plugin"); process.env.NODE_ENV = 'production'; module.exports = { // webpack配置 // 入口起點 entry: { index: './src/js/index.js', home:
'./src/js/home.js' }, // 輸出 output: { // 輸出檔名 filename: './js/[name].js', // 輸出路徑 // __dirname nodejs的變數,代表當前檔案的目錄絕對路徑 path: resolve(__dirname, 'build') }, // loader的配置 module: { rules: [ // 詳細loader配置 // 不同檔案必須配置不同loader處理
//js程式碼檢查eslint // { // test: /\.js$/, // exclude: /node_modules/, // // 優先執行 // enforce: 'pre', // loader: 'eslint-loader', // options: { // // 自動修復eslint的錯誤 // fix: true // } // }, //相容性處理 { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader', options: { // 預設:指示babel做怎麼樣的相容性處理 presets: [ [ //第一種方式 基本js語法處理 '@babel/preset-env', // 第三種家在方式 --- core-js { // 按需載入 useBuiltIns: 'usage', // 指定core-js版本 corejs: { version: 3 }, // 指定相容性做到哪個版本瀏覽器 targets: { chrome: '60', firefox: '60', ie: '9', safari: '10', edge: '17' } } ] ] } }, //處理css資源 { // 匹配哪些檔案 test: /\.css$/, // 使用哪些loader進行處理 use: [ // use陣列中loader執行順序:從右到左,從下到上 依次執行 // 建立style標籤,將js中的樣式資源插入進行,新增到head中生效 // 'style-loader', //*** 這個loader取代style-loader。作用:提取js中的css成單獨檔案 MiniCssExtractPlugin.loader, // 將css檔案變成commonjs模組載入js中,裡面內容是樣式字串 'css-loader', //設定css相容性 // 使用loader的預設配置 // 'postcss-loader', // 修改loader的配置 { loader: 'postcss-loader', options: { postcssOptions: { plugins: [ [ "postcss-preset-env" ], ], // parser: "postcss-js", }, // execute: true, }, } ] }, { //處理less檔案 test: /\.less$/, use: [ // 'style-loader', //*** 這個loader取代style-loader。作用:提取js中的css成單獨檔案 MiniCssExtractPlugin.loader, 'css-loader', //設定css相容性 // 使用loader的預設配置 // 'postcss-loader', // 修改loader的配置 { loader: 'postcss-loader', options: { postcssOptions: { plugins: [ [ "postcss-preset-env" ], ], // parser: "postcss-js", }, // execute: true, }, }, // 將less檔案編譯成css檔案 // 需要下載 less-loader和less 'less-loader' ] }, // 處理外部(css)圖片資源 { // 問題:預設處理不了html中img圖片 // 處理圖片資源 test: /\.(jpg|png|gif)$/, // 需要一個type 否則會出現問題 type: 'javascript/auto', // 使用一個loader // 下載 url-loader file-loader loader: 'url-loader', options: { // 圖片大小小於8kb,就會被base64處理 // 優點: 減少請求數量(減輕伺服器壓力) // 缺點:圖片體積會更大(檔案請求速度更慢) limit: 8 * 1024, outputPath: 'imgs', // 問題:因為url-loader預設使用es6模組化解析,而html-loader引入圖片是commonjs // 解析時會出問題:[object Module] // 解決:關閉url-loader的es6模組化,使用commonjs解析 esModule: false, // 給圖片進行重新命名 // [hash:10]取圖片的hash的前10位 // [ext]取檔案原來副檔名 name: '[hash:10].[ext]', } }, // 處理html檔案的img圖片 { test: /\.html$/, // 處理html檔案的img圖片(負責引入img,從而能被url-loader進行處理) loader: 'html-loader', }, // 打包其他資源(除了html/js/css資源以外的資源) { // 排除css/js/html資源 exclude: /\.(css|js|html|less|jpg|png)$/, loader: 'file-loader', options: { name: '[hash:10].[ext]', outputPath: 'media' } }, ] }, optimization: { //預設是在生產環境才會壓縮程式碼,設定為true則開發環境開啟壓縮程式碼 minimize: true, //設定壓縮css外掛 minimizer: [new TerserPlugin({ test: /\.js(\?.*)?$/i, //匹配參與壓縮的檔案 parallel: true, //使用多程序併發執行 terserOptions: { //Terser 壓縮配置 output: { comments: false } }, extractComments: true, //將註釋剝離到單獨的檔案中 })], }, // plugins的配置 plugins: [ // 詳細plugins的配置 // html-webpack-plugin // 功能:預設會建立一個空的HTML,自動引入打包輸出的所有資源(JS/CSS) // 需求:需要有結構的HTML檔案 new HtmlWebpackPlugin({ // 複製 './src/index.html' 檔案,並自動引入打包輸出的所有資源(JS/CSS) template: './src/index.html', chunks: ['index'], filename: "index.html", minify: { // 移除空格 collapseWhitespace: true, // 移除註釋 removeComments: true } }), new HtmlWebpackPlugin({ // 複製 './src/index.html' 檔案,並自動引入打包輸出的所有資源(JS/CSS) filename: './src/Page/Home.html', template: './src/Page/Home.html', chunks: ['home'], minify: { // 移除空格 collapseWhitespace: true, // 移除註釋 removeComments: true } }), new HtmlWebpackPlugin({ // 複製 './src/index.html' 檔案,並自動引入打包輸出的所有資源(JS/CSS) filename: './src/Page/AdvancedSearch.html', template: './src/Page/AdvancedSearch.html', chunks: ['advancedsearch'], minify: { // 移除空格 collapseWhitespace: true, // 移除註釋 removeComments: true } }), new HtmlWebpackPlugin({ // 複製 './src/index.html' 檔案,並自動引入打包輸出的所有資源(JS/CSS) filename: './src/Page/DataStatistics.html', template: './src/Page/DataStatistics.html', chunks: ['datastatistics'], minify: { // 移除空格 collapseWhitespace: true, // 移除註釋 removeComments: true } }), new HtmlWebpackPlugin({ // 複製 './src/index.html' 檔案,並自動引入打包輸出的所有資源(JS/CSS) filename: './src/Page/keyWordList.html', template: './src/Page/keyWordList.html', chunks: ['keywordlist'], minify: { // 移除空格 collapseWhitespace: true, // 移除註釋 removeComments: true } }), new HtmlWebpackPlugin({ // 複製 './src/index.html' 檔案,並自動引入打包輸出的所有資源(JS/CSS) filename: './src/Page/SpatialQuery.html', template: './src/Page/SpatialQuery.html', chunks: ['spatialquery'], minify: { // 移除空格 collapseWhitespace: true, // 移除註釋 removeComments: true } }), new HtmlWebpackPlugin({ // 複製 './src/index.html' 檔案,並自動引入打包輸出的所有資源(JS/CSS) filename: './src/Page/Login.html', template: './src/Page/Login.html', chunks: ['login'], minify: { // 移除空格 collapseWhitespace: true, // 移除註釋 removeComments: true } }), //從js提取css外掛 new MiniCssExtractPlugin({ // 設定輸出的檔案目錄和重設檔名 filename: 'css/[name].css' }) ], // 模式 mode: 'development' }

 

 package.json檔案

{
  "name": "jquerymap",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "webpack-dev-server --open --port 3000",
    "build": "webpack --mode production",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.15.8",
    "@babel/preset-env": "^7.15.8",
    "babel-loader": "^8.2.3",
    "core-js": "^3.18.3",
    "css-loader": "^6.4.0",
    "css-minimizer-webpack-plugin": "^3.1.1",
    "eslint": "^7.32.0",
    "eslint-config-airbnb-base": "^14.2.1",
    "eslint-loader": "^4.0.2",
    "eslint-plugin-import": "^2.25.2",
    "file-loader": "^6.2.0",
    "html-loader": "^3.0.0",
    "html-webpack-plugin": "^5.4.0",
    "jquery": "^3.6.0",
    "less": "^4.1.2",
    "less-loader": "^10.2.0",
    "mini-css-extract-plugin": "^2.4.3",
    "postcss": "^8.3.10",
    "postcss-loader": "^6.2.0",
    "postcss-preset-env": "^6.7.0",
    "style-loader": "^3.3.1",
    "url-loader": "^4.1.1",
    "webpack": "^5.59.1",
    "webpack-cli": "^4.9.1"
  },
  "browserslist": {
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ],
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ]
  },
  "eslintConfig": {},
  "dependencies": {
    "axios": "^0.26.1",
    "eslint-plugin-html": "^6.2.0",
    "nanoid": "^3.3.2",
    "nprogress": "^0.2.0",
    "terser-webpack-plugin": "^5.3.1",
    "webpack-dev-server": "^4.8.1"
  }
}

 

檔案目錄截圖