从零学习搭建webpack工程(三)

661 阅读2分钟

传送门:

从零学习搭建webpack工程(一)

从零学习搭建webpack工程(二)

五、利用babel对ES6进行编译

1、安装依赖babel-loader @babel/core @babel/plugin-syntax-dynamic-import @babel/plugin-transform-runtime @babel/preset-env
npm install -D babel-loader @babel/core @babel/plugin-syntax-dynamic-import @babel/plugin-transform-runtime @babel/preset-env
2、安装依赖 @babel/runtime
npm install -S @babel/runtime
3、配置webpack.config.js中的babel-loader
    module: {
        rules: [
            {
                test: /\.js$/,//匹配规则后缀名.js文件
                use: {
                    loader: 'babel-loader'
                },
                exclude: /node_modules/ //忽略node_modules下的js文件
            }
        ]
    },
4、配置编译ES6需要的plugin

在根目录下新建 babel.config.js

module.exports = {
    "presets": [
        "@babel/preset-env"
    ],
    "plugins": [
        "@babel/plugin-transform-runtime",
        "@babel/plugin-syntax-dynamic-import"
    ]
}
5、在index.js中添加ES6代码
let value = 'hello webpack'
const createElement = (value) => {
    const box = document.createElement("div")
    box.innerHTML = value
    document.body.appendChild(box)
}
createElement(value)
createElement("hello ES6")
createElement("hello weixiao")
6、npm run devnpm run build

编译后的代码

六、利用loader对css,scss,sass,less,编译打包

1、安装依赖
npm install -D style-loader css-loader postcss-loader autoprefixer

npm install -D mini-css-extract-plugin

npm install -D less less-loader

npm install -D node-sass sass-loader
2、配置css,less,sass

在webpack.config.js中配置loader

   module: {
    rules: [
        {
            test: /\.js$/,
            use: {
                loader: 'babel-loader'
            },
            exclude: /node_modules/
        },
        {
            test: /\.(css|scss|sass)$/,
            use: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader']
        },
        {
            test: /\.less$/,
            use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
        }
    ]
}
4、配置postcss-loader需要的plugin

在根目录下新建 postcss.config.js文件

module.exports = {
plugins: [
    require("autoprefixer")
    ]
}
5、src下 新建style文件夹

新建文件index.css

body {
  background: #000;
}

新建文件index.scss

body {
  color: #fff;
}

新建文件index.less

body {
    div {
        background: green;
    }
}
6、在index.js中引入三个样式文件
import "./style/index.css"
import "./style/index.scss"
import "./style/index.less"
7、npm run dev

8、npm run build

发现文件dist下没有生成css文件,此时的css被打包在了js中。如果要打包css文件,我们需要安装新的plugin

七、利用mini-css-extrac-plugin打包css文件

1、安装依赖mini-css-extrac-plugin
npm install -D mini-css-extract-plugin
2、配置mini-css-extract-plugin

在webpack.config.js中引入,将匹配css,scss,sass,less中的loader中的style-loader替换为 MiniCssExtractPlugin.loader

3、配置plugin
    new MiniCssExtractPlugin({
        filename: "css/[name].[hash:7].css",
        chunkFilename: "css/[id].[hash:7].css"
    })
4、npm run build执行

dist文件如下

八、安装loader实现对图片,字体图标的打包

1、安装loader
npm install -D url-loader 
npm install -D html-withimg-loader  //解析html中img
2、配置weboack.config.js中loader
           {
            test: /\.(jpg|png|gif|svg)$/,
            use: {
                loader: 'url-loader',
                options: {
                    limit: 1024 * 1,//图片大小,小于1024k编译到js中,否则编译到文件中
                    name: '[name].[hash:7].[ext]',
                    publicPath: '../images',//路径
                    outputPath: 'images/'//输出路径
                }
            }
        },
        {
            test: /\.(woff|woff2|eot|ttf|otf)$/,
            use: {
                loader: 'url-loader',
                options: {
                    limit: 1024 * 1,
                    name: '[name].[hash:7].[ext]',
                    publicPath: '../font',
                    outputPath: 'font/'
                }
            }
        },
        {
            test: /\.html$/i,
            loader: "html-withimg-loader"
        }
  • 踩坑 : css文件中的backgroundImage路径为 publicPath+name。路径报错可尝试修改publicPath
3、index.js中添加
import image from "./assest/image/0.jpg"//路径为存放图片的地址
document.body.style.backgroundImage = `url(${image})`
4、在index.html中添加 img 以及iconfont
<div><i class="icon iconfont icon-shangpin">icon webpack</i></div>
<img src="./src/assest/image/0.jpg" alt="">
5、npm run dev | npm run build
打包后会在dist文件下生成 images文件夹和font文件夹

传送门:

从零学习搭建webpack工程(一)

从零学习搭建webpack工程(二)