webpack資源打包入門,包含對css和圖片文件打包和實時加載

1.css-loader打包css文件

(1).需要安裝模塊style-loader 和css-loader

npm install --save-dev style-loader css-loader

官方地址:https://www.webpackjs.com/guides/asset-management/#%E5%8A%A0%E8%BD%BD-css

(2)配置webpack.config.js文件,在module下的rules中加入css的配置,其中的兩個loader順序不能倒只能這樣配置,style-loader用於js識別css,css-loader用於css轉化爲js,css-loader會把css文件種的內容在打包是打入到js文件種

2.file-loader打包圖片

(1)安裝模塊file-loader

npm install -save-dev file-loader

官方地址:https://www.webpackjs.com/guides/asset-management/#%E5%8A%A0%E8%BD%BD%E5%9B%BE%E7%89%87

(2)配置webpack.config.js方法跟css-loader一樣

3.像2中那樣加入圖片後訪問index.html頁面時不能正常加載,是因爲打包後圖片位置會在設置的輸出路徑dist下,但是訪問index.html是在項目的根目錄下,所以訪問不到,需要把index.html文件放到打包路徑dist下才行,所以需要把index.html文件也在打包時放到打包路徑dist下才比較合適,這樣可以直接把dist中的所有文件直接發佈到服務器即可

將index.html打包到打包路徑下需要使用模塊html-webpack-plugin

(1)安裝模塊 npm install --save-dev html-webpack-plugin

官方地址:https://www.webpackjs.com/guides/output-management/#%E8%AE%BE%E5%AE%9A-htmlwebpackplugin

(2)配置webpack.config.js

打包後的文件

打包後的index.html文件中會自動引入打包的js文件

4.因爲每次看頁面效果多需要手動打包並且刷新頁面,使用模塊 webpack-dev-server 可以實時打包並刷新頁面

(1)安裝模塊webpack-dev-server 

npm install --save-dev webpack-dev-server

官方地址:https://www.webpackjs.com/guides/development/#%E4%BD%BF%E7%94%A8-webpack-dev-server

安裝後在package.js中加入一個指令 "dev":"webpack-dev-server --open"  其中的--open表示啓動後打開瀏覽器

指令名稱隨意,一般使用start 或者dev 因爲是啓動項目,並且是開發環境所以習慣使用start  或者dev

5.已上內容詳細代碼如下

package.js

{
  "name": "demo1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack",
    "test": "echo \"Error: no test specified\" && exit 1",
    "watch": "webpack --watch",
    "dev":"webpack-dev-server --open"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^3.4.2",
    "file-loader": "^5.1.0",
    "html-webpack-plugin": "^3.2.0",
    "style-loader": "^1.1.3",
    "webpack": "^4.35.2",
    "webpack-cli": "^3.3.11",
    "webpack-dev-server": "^3.10.3"
  }
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>


    
</body>
</html>

webpack.config.js

const path=require("path");
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports={
    mode:"none",
    entry:"./src/js/main.js",
    output:{
        path:path.join(__dirname,"/dist/"),  //打包結果文件生成得目錄是要在絕對目錄下
        filename:"bundle.js"
    },
    devServer: {
        contentBase: './dist'
        },
    plugins:[
        new HtmlWebpackPlugin({
            //指定要打包的模板頁面,
            //會把index.html打包到與bundle.js相同的目錄下,打包位置爲output中的path路徑
           template:'./index.html'
        })
    ],
    module:{
        rules:[
            {
                test:/\.css$/, //正則表達式,匹配css資源文件
                use:[ //這裏需要注意,loader的加載順序爲從下往上加載 這裏的兩個loader順序不能倒
                    'style-loader',  //js識別css
                    'css-loader' //css轉化爲js
                ]
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: [
                'file-loader'
                ]
            }
        ]
    }
}

main.js

import style from "../css/style.css"

style.css

body{background-color: red;background-image: url(../img/banner-1.jpg);}

以上文件的文件目錄結構,其中dist文件夾是打包出來的目錄和文件

6.IE7及以下的瀏覽器不能識別ES6語法,如果想兼容低版本瀏覽器可以將使用label-loader在打包時將es6轉化爲es5

使用方法參考官方文檔:https://www.webpackjs.com/loaders/babel-loader/#%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章