前语
从零搭一个极简版 webpack+React 工程(二)
书接上文,作者的 study-webpack 工程现已能够运用 React 和 Typescript 了。前端不只是有 js 还有 css。本篇文章将叙述 webpack 怎么处理 css
文件地址
GitHub 地址
支撑 css
装置依靠包
npm i style-loader css-loader -D
- css-loader:js 中导入了 css,那么就需求运用 css-loader 来识别这个模块,通过特定的语法规矩进行转化内容最终导出。3
- style-loader: 是通过一个 JS 脚本创立一个 style 标签,里面包括一些样式。style-loader 是不能单独运用的,应为它并不担任解析 css 之前的依靠联系,每个 loader 的功用都是单一的,各自拆分独立。3
修正 webpack.common.js
module: {
rules: [
{
// other
},
{
test: /\.(css)$/,
use: ["style-loader", "css-loader"],
},
],
},
修正 src/Home.jsx
import React from "react"
import "./Home.css"
type Props = {}
export default function Home({}: Props) {
return <div className="box">我是typescript</div>
}
由于 src/Home.jsx 引进了 Home.css,所以在根目录新建 Home.css 文件
新建 Home.css
.box {
color: red;
}
从头运转
npm start
在浏览器中,你应该能够看到如下效果:
本部分代码地址:支撑 css
支撑 less、sass
在开发过程中,作者会用到一些 css 预编译东西比方 less、sass,怎么让 webpack 支撑 less、sass 呢?
装置依靠
npm i less less-loader sass sass-loader -D
修正 webpack.common.js
module: {
rules: [
{
// other
},
{
// other
},
{
test: /\.(less)$/,
use: ["style-loader", "css-loader", "less-loader"],
},
{
test: /\.(scss)$/,
use: ["style-loader", "css-loader", "sass-loader"],
},
],
},
修正 src/Home.tsx
import React from "react"
import "./Home.css"
import "./style.less"
import "./style.scss"
type Props = {}
export default function Home({}: Props) {
return <div className="box">我是typescript</div>
}
在 src/Home.tsx 引进 style.less、style.scss 文件,所以需求新建这两个文件并编辑如下代码
新建 style.less
.box {
background: blue;
}
新建 style.scss
.box {
border: 1px solid green;
}
工程目录图
新建的文件位置如下图所示
从头执行
从头执行 npm start
你应该能够在浏览器中看到如下效果
行文至此代码地址:支撑 less、sass
PostCSS
不了解 PostCSS 能够点击我
PostCSS 是一个用 JavaScript 东西和插件转化 CSS 代码的东西
PostCSS 运用说明
装置依靠包
npm i postcss-loader autoprefixer -D
修正 webpack.common.js
module: {
rules: [
{
// other
},
{
test: /\.(css)$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
importLoaders: 1,
},
},
{
loader: "postcss-loader",
},
],
},
{
// other
},
],
},
新增 postcss.config.js
postcss 收效需求运用一些装备,postcss-loader 会默许运用根目录下 postcss.config.js 文件
根目录新建 postcss.config.js 并编写如下代码:
module.exports = {
plugins: [require("autoprefixer")],
}
目录结构
修正 src/Home.css
.box {
display: flex;
color: red;
justify-content: center;
}
修正 package.json
"dependencies": {
// other
},
"browserslist": [
">0.2%",
"not dead",
"ie >= 9",
"not op_mini all"
]
从头运转
在浏览器控制台能够看到如下图所示,postcss 收效了
最终
postcss需求在css-loader之前,less-loader或许scss-loader之前之后运用,所以修正webpack.common.js如下修正,可支撑less和sass预编译文件支撑主动增加浏览器前缀
module: {
rules: [
{
test: /\.(js|jsx|ts|tsx)/,
loader: "babel-loader",
},
{
test: /\.(css)$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
importLoaders: 1,
},
},
{
loader: "postcss-loader",
},
],
},
{
test: /\.(less)$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
importLoaders: 2,
},
},
{
loader: "postcss-loader",
},
"less-loader",
],
},
{
test: /\.(scss)$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
importLoaders: 2,
},
},
{
loader: "postcss-loader",
},
"sass-loader",
],
},
],
},
支撑文件与字体引进
在开发过程中需求运用一些图片后者自定义字体,有的需求是直接引证静态服务器,有的是直接打包在工程中。所以需求对引进的图片后者字体做一些处理
装置依靠
npm i url-loader file-loader -D
修正webpack.common.js
module: {
rules: [
{
// other
},
{
test: /\.(bmp|gif|png|jpe?g)$/,
use: [
{
loader: "url-loader",
options: {
limit: 10 * 1024,
name: "[name].[contenthash:8].[ext]",
outputPath: "assets/images",
},
},
],
},
{
test: /\.(ttf|woff|woff2|eot|otf)$/,
use: [
{
loader: "url-loader",
options: {
name: "[name].[contenthash:8].[ext]",
outputPath: "assets/fonts",
},
},
],
},
],
},
能够在study-webpack工程中运用后缀为.bmp、.gif、.png、.jpeg等格式的图片的。
结语
本篇极简,只叙述怎么运用这些依靠包,并不详细描述为什么这么运用,所运用的依靠包详细效果是什么。但
下一篇:从零搭一个极简版webpack+React工程(四)
是文中有许多引证链接,读者如有兴趣可自行查阅。
作者水品有限,阐述或许讲解有误欢迎评论区留言指导,感谢之至
参考文献
1.style-loader
2.css-loader 和 style-loader 联系原理及效果
3.css-loader 和 style-loader 的区别和运用
4.less-loader