我们还需要设置clean-webpack-plugin
,在每次构建后清除dist
文件夹中的所有内容。 这对于确保不遗留任何旧数据很重要。
clean-webpack-plugin
-删除/清理构建文件夹
const path = require(‘path’)
const HtmlWebpackPlugin = require(‘html-webpack-plugin’)
const {CleanWebpackPlugin} = require(‘clean-webpack-plugin’)
module.exports = {
/* … */
plugins: [
/* … */
new CleanWebpackPlugin(),
],
}
webpack 使用 loader
预处理一些加载的文件,如 js 文件、静态资源(如图像和CSS样式)和编译器(如TypeScript
和Babel
)。webpack 5也有一些内置的资产加载器。
在我们的项目中,有一个HTML文件,该文件可以加载并引入一些 JS ,但实际上并没有执行任何操作。 那么这个webpack
配置要做的主要事情是什么?
-
将 JS 编译为浏览器可以理解的版本
-
导入样式并将
SCSS
编译为CSS
-
导入图像和字体
-
(可选)设置React或Vue
Babel
是一个工具,可让使用最新的 JS 语法。
建立一个规则来检查项目中(node_modules
之外)的任何.js
文件,并使用babel-loader
进行转换。 Babel 还有一些其他的依赖项:
-
babel-loader
-使用 Babel 和 webpack 传输文件。 -
@babel/core
-将ES2015+ 转换为向后兼容的 JavaScript -
@babel/preset-env
-Babel 的智能默认设置 -
@babel/plugin-proposal-class-properties
-自定义 Babel 配置的示例(直接在类上使用属性)
npm i -D babel-loader @babel/core @babel/preset-env @babel/preset-env @babel/plugin-proposal-class-properties
webpack.config.js
module.exports = {
/* … */
module: {
rules: [
// JavaScript
{
test: /.js$/,
exclude: /node_modules/,
use: [‘babel-loader’],
},
],
},
}
如果是 TypeScript 项目,使用的是
typescript-loader
而不是babel-loader
。
现在Babel已经设置好了,但是我们的Babel
插件还没有。可以在index.js
中添加一些新的语法来证明它还不能正常工作。
// 创建没有构造函数的类属性
class Game {
name = ‘Violin Charades’
}
const myGame = new Game()
// 创建 p 节点
const p = document.createElement(‘p’)
p.textContent = I like ${myGame.name}.
const heading = document.createElement(‘h1’)
heading.textContent = ‘Interesting!’
const app = document.querySelector(‘#root’)
app.append(heading, p)
要解决这个问题,只需在项目的根目录中创建一个.babelrc
文件。可以使用preset-env
和plugin-proposal-class-properties
添加更多默认值。
{
“presets”: [“@babel/preset-env”],
“plugins”: [“@babel/plugin-proposal-class-properties”]
}
现在运行npm run build
一切准备就绪。
假设我们需要引用一张图片并直接导入到 JS 文件中,这样是无法正常工作的。 为了演示,创建 src/ images
并向其中添加图像,然后尝试将其导入到index.js
文件中。
src/index.js
import example from ‘./images/example.png’
/* … */
运行构建时,再次看到错误:
webpack
有一些内置的asset modules ,可用于静态资源。 对于图像类型,我们将使用asset/resource
,注意,这里是一个type
,而不是loader
。
webpack.config.js
module.exports = {
/* … */
module: {
rules: [
// Images
{
test: /.(?:ico|gif|png|jpg|jpeg)$/i,
type: ‘asset/resource’,
},
],
},
}
构建后,可以在dist
文件夹查看。
webpack 还有一个asset module
,可以使用asset/inline
内联某些数据,例如svgs
和字体。
src/index.js
import example from ‘./images/example.svg’
/* … */
webpack.config.js
module.exports = {
/* … */
module: {
rules: [
// Fonts and SVGs
{
test: /.(woff(2)?|eot|ttf|otf|svg|)$/,
type: ‘asset/inline’,
},
],
},
}
同样的需要使用 style loader
才能在脚本中执行类似import 'file.css'
的操作。
现在很多人都在使用CSS-in-JS、styled-components和其他工具来将样式引入到他们的 JS 应用程序中。
当网站只有一个 CSS 文件,仅能够加载一个CSS文件就足够了。但如果想使用PostCSS,为了能在任何浏览器中使用所有最新的CSS特性。或者想使用Sass, CSS预处理器,那就需要使用其它的 loader 处理。
我想使用这三种方法——在Sass中编写,在PostCSS
中处理,以及编译到CSS。这需要引入一些加载器和依赖项。
-
sass-loader
— 加载 SCSS 并编译为CSS -
node-sass
— Node Sass -
postcss-loader
— 使用 PostCSS 处理 CSS -
css-loader
— 解析 css import -
style-loader
—— 将CSS注入到DOM中
npm i -D sass-loader postcss-loader css-loader style-loader postcss-preset-env node-sass
就像Babel一样,PostCSS 也需要一个配置文件 postcss.config.js
,在根目录中创建它,并输入以下内容:
postcss.config.js
module.exports = {
plugins: {
‘postcss-preset-env’: {
browsers: ‘last 2 versions’,
},
},
}
为了测试 Sass 和 PostCSS 是否正常工作,创建 src/styles/main.scss
,并输入以下内容:
src/styles/main.scss
$font-size: 1rem;
$font-color: lch(53 105 40);
html {
font-size: $font-size;
color: $font-color;
}
现在,将文件导入index.js
并添加四个 loader
。 它们从最后编译到第一个,因此列表中最后一个是sass-loader
,因为需要编译,然后是PostCSS
,然后是CSS,最后是style-loader
,它将CSS注入到DOM 中。
src/index.js
import ‘./styles/main.scss’
/* … */
webpack.config.js
module.exports = {
/* … */
module: {
rules: [
// CSS, PostCSS, and Sass
{
test: /.(scss|css)$/,
use: [‘style-loader’, ‘css-loader’, ‘postcss-loader’, ‘sass-loader’],
},
],
},
}
现在,重新构建时,项目中已经应用了Sass
和PostCSS
。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-fQHhvAYh-1712719591048)]
最后
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了
[外链图片转存中…(img-A4Hzmbmb-1712719591048)]
[外链图片转存中…(img-PfuYbQ2Y-1712719591048)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-P15106if-1712719591049)]