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

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