1. 程式人生 > >webpack學習(二):配置載入css, 圖片, 字型, 資料(JSON, XML, CSV)等資原始檔

webpack學習(二):配置載入css, 圖片, 字型, 資料(JSON, XML, CSV)等資原始檔

demo地址: https://github.com/Lkkkkkkg/webpack-demo
webpack初步配置參照 https://blog.csdn.net/qq593249106/article/details/84892069

配置載入css檔案

webpack 視所有檔案都為模組, css , 圖片, 字型, 資料等靜態資源都會打包進 js 檔案, 所以會需要用到 loader 檔案, 接下來安裝處理css的loader檔案

npm install style-loader css-loader --save-dev //需要用到style-loader和css-loader, 分別有不同作用

在 webpack.config.js 引入loader:
webpack.config.js

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [ //配置載入器, 用來處理原始檔, 可以把es6, jsx等轉換成js, sass, less等轉換成css
{ test: /\.css$/, //配置要處理的檔案格式,一般使用正則表示式匹配 use: ['style-loader', 'css-loader'] //使用的載入器名稱 } ] } };

引入 loader 後, 就可以在你的 src/index.js 檔案 impor t你想引入的 css 檔案或者其他靜態資源
在 src 目錄檔案下新建一個 style.css , 此時目錄結構如下:

|- /dist //用於放打包後文件的資料夾
  |- bundle.
js //出口檔案 |- index.html //模板檔案 |- /node_modules |- /src //用於放原始檔的資料夾 |- index.js //入口檔案 |- style.css //css檔案 |- package.json |- webpack.config.js //webpack配置檔案

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>webpack-demo02</title>
</head>
<body>
<script src="bundle.js"></script>
</body>
</html>

index.js

import _ from 'lodash';
import './style.css'

function component() {
    var element = document.createElement('div');

    element.innerHTML = _.join(['Hello', 'webpack'], ' '); //要用到lodash的語法
    element.classList.add('hello'); //給元素新增一個類名hello

    return element;
}

document.body.appendChild(component());

style.css

.hello {
    color: green;
}

用NPM指令碼執行webpack進行打包

npm run build

開啟index.html
在這裡插入圖片描述
webpack打包成功, css起了作用, 文字變成了綠色

配置載入圖片

載入圖片需要用到另外一個 loader : file-loader

npm install --save-dev file-loader

在 webpack.config.js 引入loader:

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [ //配置載入器, 用來處理原始檔, 可以把es6, jsx等轉換成js, sass, less等轉換成css
            {
                test: /\.css$/, //配置要處理的檔案格式,一般使用正則表示式匹配
                use: ['style-loader', 'css-loader'] //使用的載入器名稱
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: ['file-loader']
            }
        ]
    }
};

現在, 當你 import MyImage from ‘./my-image.png’,該影象將被處理並新增到 output 目錄, 並且 MyImage 變數將包含該影象在處理後的最終 url (也就是會幫你改掉對應的圖片路徑), 當使用 css-loader 時, 如上所示, 你的 CSS 中的 url(’./my-image.png’) 會使用類似的過程去處理, loader 會識別這是一個本地檔案, 並將 ‘./my-image.png’ 路徑,替換為輸出目錄中影象的最終路徑, html-loader 以相同的方式處理 < img src="./my-image.png" / >

現在再 src 資料夾下新增一張圖片picture.jpg:

|- /dist //用於放打包後文件的資料夾
  |- bundle.js //出口檔案
  |- index.html //模板檔案
|- /node_modules
|- /src //用於放原始檔的資料夾
  |- index.js //入口檔案
  |- picture.jpg //圖片
  |- style.css //css檔案
|- package.json
|- webpack.config.js //webpack配置檔案

然後在js中把這張圖片加入到html中:

import _ from 'lodash';
import './style.css'
import Picture from './picture.jpg'

function component() {
    var element = document.createElement('div');

    element.innerHTML = _.join(['Hello', 'webpack'], ' '); //要用到lodash的語法
    element.classList.add('hello'); //給元素新增一個類名hello

    var Pic = new Image(); //新建一個圖片物件
    Pic.src = Picture; //圖片物件的路徑設為引入進來的Picture

    element.appendChild(Pic); //把圖片物件插入到上面的div物件裡

    return element;
}

document.body.appendChild(component());

同時在css中引用圖片:

.hello {
    color: green;
    background-image: url('./picture.jpg');
}

重新構建:

npm run build

開啟index.html
在這裡插入圖片描述
可以看到新增的img成功引用到了圖片, 並且css的引用的圖片背景也成功了, 而且dist目錄下多了一個名為eede154574125677a58d2f6e6112e417.jpg圖片, 說明圖片被成功處理了

配置載入字型

前面安裝的file-loader 和 url-loader 可以接收並載入任何檔案, 然後將其輸出到構建目錄, 所以也可以將字型進行載入
在 webpack.config.js 引入loader:

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [ //配置載入器, 用來處理原始檔, 可以把es6, jsx等轉換成js, sass, less等轉換成css
            {
                test: /\.css$/, //配置要處理的檔案格式,一般使用正則表示式匹配
                use: ['style-loader', 'css-loader'] //使用的載入器名稱
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: ['file-loader']
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                use: ['file-loader']
            }
        ]
    }
};

在 src 資料夾下放入要引用的字型檔案 font.ttf :

|- /dist //用於放打包後文件的資料夾
  |- bundle.js //出口檔案
  |- index.html //模板檔案
|- /node_modules
|- /src //用於放原始檔的資料夾
  |- font.ttf //字型檔案
  |- index.js //入口檔案
  |- picture.jpg //圖片
  |- style.css //css檔案
|- package.json
|- webpack.config.js //webpack配置檔案

然後再 style.css 中使用自定義字型:

@font-face {
    font-family: 'MyFont';
    src:  url('./font.ttf') format('truetype');
    font-weight: bold;
    font-style: normal;
}

.hello {
    color: green;
    font-family: MyFont;
    font-size: 100px;
    background-image: url('./picture.jpg');
}

輸入 npm run build 重新構建, 開啟index.html:
在這裡插入圖片描述
同時dist目錄下多了一個名為 7823980a3d6d6d2b65f735d445c8a4bd.ttf 的檔案, 說明字型檔案也被處理過了, 成功載入了字型

配置載入資原始檔(JSON, XML, CSV)

類似於 NodeJS, JSON 支援實際上是內建的, 也就是說 import Data from ‘./data.json’ 預設將正常執行, 要匯入 CSV、TSV 和 XML, 需要用到 csv-loader 和 xml-loader:

npm install csv-loader xml-loader --save-dev

引入loader:
webpack.config.js

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [ //配置載入器, 用來處理原始檔, 可以把es6, jsx等轉換成js, sass, less等轉換成css
            {
                test: /\.css$/, //配置要處理的檔案格式,一般使用正則表示式匹配
                use: ['style-loader', 'css-loader'] //使用的載入器名稱
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: ['file-loader']
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                use: ['file-loader']
            },
            {
                test: /\.(csv|tsv)$/,
                use: ['csv-loader']
            },
            {
                test: /\.xml$/,
                use: ['xml-loader']
            }

        ]
    }
};

在 src 資料夾下加入 data.xml 資料檔案:

|- /dist //用於放打包後文件的資料夾
  |- bundle.js //出口檔案
  |- index.html //模板檔案
|- /node_modules
|- /src //用於放原始檔的資料夾
  |- data.xml //資料檔案
  |- font.ttf //字型檔案
  |- index.js //入口檔案
  |- picture.jpg //圖片
  |- style.css //css檔案
|- package.json
|- webpack.config.js //webpack配置檔案

data.xml

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Mary</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Call Cindy on Tuesday</body>
</note>

修改一下 index.js , 引用一下 data.xml 裡面的資料:

import _ from 'lodash';
import './style.css'
import Picture from './picture.jpg'
import Data from './data.xml';

function component() {
    var element = document.createElement('div');

    element.innerHTML = _.join(['Hello', 'webpack'], ' '); //要用到lodash的語法
    element.classList.add('hello'); //給元素新增一個類名hello

    var Pic = new Image(); //新建一個圖片物件
    Pic.src = Picture; //圖片物件的路徑設為引入進來的Picture

    element.appendChild(Pic); //把圖片物件插入到上面的div物件裡

    console.log(Data); //輸出資料

    return element;
}

document.body.appendChild(component());

輸入npm run build 重新構建, 開啟index.html:

在這裡插入圖片描述
按F12, 在控制檯裡看到輸出了xml檔案的資料, 成功載入xml資料