webpack-plugin

64 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情

上篇文章讲解了基础的功能,

下面开始讲 webpack打包css

q:webpack loader解决什么问题?

a:将除js文件以外的其他资源转换为js

1.创建index.css

2.在index.js中引用index.css

3.重新执行 npm run build 会报错

这个是因为 webpack只能打包js,不能打包css

这个时候需要使用loader将css转换成js代码

这里使用css-loader、style-loader,这里需要注意的地方是,loader是从左向右开始执行的

所以是style-loader在左,css-loader在右

\

首先安装下这两个包

yar add css-loader style-loader

然后配置webpack.config.js

const path = require('path')
module.exports = {
    mode: 'development',
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname,'./dist'),
        filename: 'bundle.js'
    },
    devtool: 'source-map',
    module: {
        rules: [
            {
                test: /.css$/,
                use: ['style-loader','css-loader']
            }
        ]
    }
}

在执行npm run build

打包css文件成功

\

打包后成功的js文件,可以看到引入了css文件

\

\

自定义Loader

功能:创建特殊的文件类型

首先在 src下创建 test.curry

然后在 test.curry下书写以下代码

<script>
    export default {
        a: 1
    }
</script>

在 src/index.js中引入 test.curry

import value from './test.curry'
console.log(value)

执行 npm run build后报错

这个时候需要编写loader来处理 .curry文件

在根目录创建loader文件夹

在loader文件夹创建curry-loader.js

1.首先写正则,来匹配test.curry中的 script标签

2.然后用 source 来匹配,返回的是个数组

3.数组的第2项就是 script 标签中的 js 代码

4.把数组中的第2项返回即可,就是可以执行的js代码

const REG = /<script>([\s\S]+?)</script>/;
module.exports = (source) => {
    const __source = source.match(REG)
    return __source && __source[1]? __source[1] : source;
}

// 判断当前模块是否为主模块,如果为主模块,则运行以下代码
// 用来对loader进行单独测试
if(require.main === module){
    const source = `
    <script>
    export default {
        a: 1
    }
</script>
    `;
    const match = source.match(REG)
}

最后在webpack.config.js中引入 这个loader

{
                test: /.curry$/,
                use: [path.resolve(__dirname,'./loader/curry-loader.js')]
            }

最后 使用 npm run build 进行打包

打包成功

\

\

看下 打包后的文件

最后看下 浏览器 控制台 的 输出结果

内联式调用loader

import 'style-loader!css-loader!./index.css'