Webpack4 学习笔记 - 03:loader 打包静态资源(样式)

八股文背诵
• 阅读 2992

使用 style-loadercss-loader 打包 css 文件

首先在src目录下创建一个 index.css 文件,内容如下:

.this_style {
    color: red;
}

修改 index.js 文件内容如下:

import './index.css';

var root = document.getElementById('root');
var wp = document.createElement('div');
wp.innerText = 'Hello, Webpack';
wp.classList.add('this_style');

root.append(wp);

代码的内容是创建一个div,并把this_style的样式赋给它,使它的字体变为红色。然后直接运行 npm run bundle 来打包会报错吗?当然会了,因为之前说过 webpack 只能处理 js 文件,遇到 css 文件时,它就不知道该怎么办了。所以我们就配置一下 webpack.config.js 来告诉它怎么做,配置内容如下:

const path = require('path'); // 得到的path为webpack.config.js所在的目录

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

然后安装 style-loadercss-loader

npm install style-loader css-loader -D

安装完之后,执行打包命令,没有报错,就说明 webpack 已经正确打包好了 css 文件。打开 index.html 可以看到,字体的颜色已经变成了红色:

Webpack4 学习笔记 - 03:loader 打包静态资源(样式)

Webpack4 学习笔记 - 03:loader 打包静态资源(样式)

下面大概来说一下 style-loadercss-loader 做了哪些工作,详细的说明可以去看官方文档。
在src目录下再新建一个 test.css 文件,给 this_style 样式加一个背景色:

.this_style {
    background-color: #999999; /* 灰色 */
}

然后在 index.css 文件中引入 test.css:

@import './test.css';

.this_style {
    color: red;
}

执行打包命令,打开 index.html 查看结果:

Webpack4 学习笔记 - 03:loader 打包静态资源(样式)

Webpack4 学习笔记 - 03:loader 打包静态资源(样式)

打包成功, 背景色显示了出来。
在这段打包的过程中,css-loader 会根据 css 的语法,比如 @import.. 分析出几个 css 文件的关系,然后把它们合并成一段 cssstyle-loader 在得到 css-loader 生成的内容之后,会把这段内容添加到指定的内页元素上,最后呈现出上图的结果。

使用 stylus-loader 打包 stylus 样式文件

接下来我们试一下打包 stylus 样式文件,在 src 目录下新建一个 test.styl 文件,内容为:

.this_style
  height 50px
  width 200px
  border 10px solid blue
  transform translate(100px, 100px)

然后在 index.css 文件中使用 @import './test.styl'; 引入这个文件,配置 webpack.config.js 文件:

const path = require('path'); // 得到的path为webpack.config.js所在的目录

module.exports = {
    entry: {
        main: './src/index.js'
    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [{
            test: /\.(css|styl)$/,
            use: ['style-loader', 'css-loader', 'stylus-loader']
        }]
    },
    mode: 'development'
}

别忘了安装 stylusstylus-loader

npm install stylus stylus-loader -D

最后执行打包,查看页面显示的内容:

Webpack4 学习笔记 - 03:loader 打包静态资源(样式)

Webpack4 学习笔记 - 03:loader 打包静态资源(样式)

一切正常,新的样式已经加了上去,说明打包 stylus 样式文件成功。
请注意,使用 loader 打包时,是有执行顺序的,依次为 从右到左执行从下到上执行

Webpack4 学习笔记 - 03:loader 打包静态资源(样式)
Webpack4 学习笔记 - 03:loader 打包静态资源(样式)
这里的执行顺序为:先用 stylus-loaderstyl 文件翻译为 css,然后 css-loader 处理好这些 css,最后给到 style-loader 做最后的处理。

使用 postcss-loader 处理一些 css 需求

注意看这个地方:

Webpack4 学习笔记 - 03:loader 打包静态资源(样式)
transform 这种样式,目前都有各大浏览器的厂商前缀,比如 -webkit-transform,但我们只写了 transform, 能不能借助一些工具自动添加上这些前缀呢,当然是可以的,这里我们就使用 postcss-loader

查看 postcss-loader 的文档,需要创建一个 postcss.config.js 文件, 在根目录下创建这个文件,内容如下:

module.exports = {
    plugins: [
        require('autoprefixer')
    ]
}

在配置里,我们使用 require('autoprefixer') 来引入 autoprefixer 插件自动给样式添加浏览器厂商前缀。
webpack.config.js 里添加 postcss-loader:

use: ['style-loader', 'css-loader', 'postcss-loader', 'stylus-loader'] // 从右到左执行

最后,安装 postcss-loaderautoprefixer

npm install postcss-loader autoprefixer -D

执行打包命令,查看结果:

Webpack4 学习笔记 - 03:loader 打包静态资源(样式)

可以看到,浏览器厂商前缀已经自动加上了,不需要我们再手动敲了,非常方便。

点赞
收藏
评论区
推荐文章
放学路上 放学路上
4年前
vscode+vue简单安装教程
1、安装vscode、node.js。2、打开vscode终端,全局安装vuecli:npminstallgvuecli用于构建项目。3、继续安装webpack(打包工具):npminstallgwebpack。4、安装完成创建一个文件夹用于存放项目,比如myvue,cd到该文件夹,使用项目创建命令:vueinitwebpackmyvue。
Easter79 Easter79
4年前
vue 根据接口返回的状态码判断用户登录状态并跳转登录页,登录后回到上一个页面(http拦截器)
背景:后台接口返回code501表示用户是未登录状态,需要登录才可访问;通过http拦截做路由跳转 第一步:src目录下新建http.js文件,内容如下:importAxiosfrom'axios'import{Loading,Message,MessageBox}from'elementui'
Easter79 Easter79
4年前
Vue+Webpack配置css
  使用VueWebpack搭建工程时,在webpack.config.js中的module的rules里针对各种文件配置加载工具。在针对css文件配置时遇到一个问题:打包构建时报错——Modulebuildfailed:Unknownword。  配置内容如下:{  test:/\.css$/,  use:
皮卡皮卡皮 皮卡皮卡皮
4年前
webpack 基本配置
概念本质上,webpack是一个现代JavaScript应用程序的静态模块打包器(modulebundler)。当webpack处理应用程序时,它会递归地构建一个依赖关系图(dependencygraph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle。安装确保安装了nodejs项目文件环境cd
虾米大王 虾米大王
3年前
java代码007
code007.jsp包含文件标识<%举例新建一个top.jsp文件,内容如下:新建一个copyright.jsp文件,内容如下:%Stringcopyright"AllCopyright&copy;某某公司";%%copyright%新建一个index.jsp
虾米大王 虾米大王
3年前
java代码098
code098.javapackagepack03;//userInfopublicclasscode098privateStringname"";publicStringgetName()returnthis.name;publicvoidsetName(Stringname)this.namename;
Stella981 Stella981
4年前
Docker镜像+nginx 部署 vue 项目
一、打包vue项目在开发完的vue项目输入如下命名,打包生成dist文件夹yarnbuild/npmrunbuild此时根目录会多出一个文件夹:dist文件夹,里面就是我们要发布的东西。如果将该dist目录整个传到服务器上,部署成静态资源站点就能直接访问到该项目。!(https://img2018.cnblog
Stella981 Stella981
4年前
React生产环境打包&&后台环境运行(有跨域+无跨域)
(1)打包项目1、yarnrunbuild或者2、npmrunbuild  打包后,webpack会自动在根目录生成build文件,里面存放着相关文件  !(https://img2020.cnblogs.com/blog/1291869/202004/1291869202004101706415171581206162.
Stella981 Stella981
4年前
Maven
在项目pom.xml中指定<build<resources<resource<!控制资源目录下要打包进去的文件,这里为全部打包<directorysrc/main/resources
Wesley13 Wesley13
4年前
解决webpack因新版本打包失败问题
最近在学习webpack打包过程中遇到的一个问题向大家分享下!创建了一个webpacksty的目录,目录下放着dist,src子目录,然后通过node环境下,npminity初始化项目出现package.json文件,src子目录下又存放着index.html和main.js文件,接下来尝试着在main.js输入一句代码当验证打包后续是否成功的过
Stella981 Stella981
4年前
OFBiz 快速入门——续二
OFBiz快速入门——续二2011年03月17日星期四00:03OFBiz 快速入门2.5 创建一个文件,取名为(controller.xml),被OFBiz webapp控制器使用的。在没有额外增加功能时,这个文件内容非常的小与简单,如下:<?xml version"1.0" encoding"UTF8"?<siteco
八股文背诵
八股文背诵
Lv1
四张机,鸳鸯织就欲双飞,可怜未老头先白;春波碧草,晓寒深处,相对浴红衣。
文章
3
粉丝
0
获赞
0