安装 webpack:
npm init -y
npm i -D webpack webpack-cli css-loader
创建 webpack.config.js 进行配置:
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
main: './src/index.js'
},
module: {
rules: [
// 不在 node_modules 中的 css,开启 css modules
{
test: /\.css$/,
exclude: /node_modules/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
/* 以前版本是通过 true 开启,相关配置接着写
modules: true
localIdentName: '[name]__[local]--[hash:base64:5]'
*/
// 现在是给 modules 一个 options 对象开启
modules: {
// 重新生成的 css 类名
localIdentName: '[name]__[local]--[hash:base64:5]'
}
}
}
]
},
// 在 node_modules 中的 css,不开启
{
test: /\.css$/,
include: /node_modules/,
use: [
MiniCssExtractPlugin.loader, 'css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__dirname, './src/index.html'),
filename: 'index.html'
}),
new MiniCssExtractPlugin({
filename: '[name].[hash].css'
})
],
output: {
filename: '[name].[hash].bundle.js',
path: path.resolve(__dirname, './dist')
}
}
更多 css-loader 的配置建议前往 github_css-loader 查看,因为版本更新后,配置可能会有变。
配置完 webpack,写 css 时要使用相关语法,因为是通过 webpack 打包时进行编译,重新生成新的 css 类名来防止全局变量名污染的。
注意: css modules 只针对类、Id选择器生效,不会对标签选择器进行模块化。
/* 全局样式 */
:global(.header) {
color: #696969;
background-color: #fff;
}
:global .main {
color: #363636;
background-color: #fff;
}
/* less 等预处理语言可以这样写 */
/* :global {
.footer {
color: #303030;
background-color: #fff;
}
} */
/* 局部样式 */
:local(.header) {
color: red;
background-color: #c2b1b1;
}
:local(.main) {
color: yellow;
background-color: rgb(136, 96, 96);
}
:local(.footer) {
color: blue;
background-color: #929292;
}
编译后的 css 代码:
/* 全局样式 */
.header {
color: #696969;
background-color: #fff;
}
.main {
color: #363636;
background-color: #fff;
}
/* less 等预处理语言可以这样写 */
/* :global {
.footer {
color: #303030;
background-color: #fff;
}
} */
/* 局部样式 */
.index__header--1JD7j {
color: red;
background-color: #c2b1b1;
}
.index__main--1j9-Y {
color: yellow;
background-color: rgb(136, 96, 96);
}
.index__footer--gJKjp {
color: blue;
background-color: #929292;
}
因为 css 类名是重新编译后的,所以使用时不能直接使用原 css 类名,要通过 import 语法使用。
import styles from './index.css';
export const Header = () => {
return `
<h1 class=${styles.header}>header</h1>
`
}
在 html 里面是这样的:
<h1 class="index__header--1JD7j">header</h1>
当下, 我们几乎所有的项目都是基于 webpack、rollup 等构建工具进行开发的,模块化已经是常态。我们对它并不陌生,今天,我们就再系统的回顾一下ES6的模块机制
Node.js 前不久发布了v13.2.0,宣布开始支持ES modules。在此之前,想要在node中使用ES modules,需要添加--experimental-module。v13.2.0版本后,可以直接使用ES modules了。
在node.js中modules(模块)与文件是一一对应的,也就是说一个node.js文件就是一个模块,文件内容可能是我们封装好的一些JavaScript方法、JSON数据、编译过的C/C++拓展等,在关于node.js的误会提到过node.js的架构
node_modules是安装node后用来存放用包管理工具下载安装的包的文件夹。比如webpack、gulp、grunt这些工具。在node.js中模块与文件是一一对应的,也就是说一个node.js文件就是一个模块。
所有的 class 的名称和动画的名称默认属于本地作用域的 CSS 文件。所以 CSS Modules 不是一个官方的规范,也不是浏览器的一种机制,它是一种构建步骤中的一个进程。
虽然已在最新的 LTS v12.17.0 中支持,但是目前仍处于 Stability: 1 - Experimental 实验阶段,如果是在生产环境使用该功能,还应保持谨慎,如果在测试环境可以安装 n install v12.17.0 进行尝试。
有时候使用 npm 上的包,发现有 bug ,我们知道如何修改,但是别人可能一时半会没法更新,或者是我们特殊需求,别人不愿意修改,这时候我们只能自己动手丰衣足食。那么我们应该如何修改别人的源码呢?
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!