第一篇主要是 webpack babel eslint
webpack
首先新建个空的文件夹并通过 终端
进入(后续所有操作基于终端)
|
|
Webpack 的安装需要借助于 npm ,所以我们您需要创建一个 package.json
Package.json 是一个标准的 npm 说明文件,里面保存着当前项目的基本信息,项目依赖以及自定义脚本任务等。
终端中使用 npm init
命令创建 package.json
执行 npm init
命令依次输入项目信息,或者直接 npm init -y
跳过这些信息的输入
|
|
准备工作完成,开始安装 webpack
webpack 4之后分成了 webpack 以及 webpack-cli 两个依赖,所以我们依次安装
|
|
接下来我们需要 创建一些文件和文件夹
当前目录下创建 src dist
两个文件夹 并在 src
里面创建两个文件 index.js
index.html
|
|
webpack 4 之后打包默认会寻找 src/index.js 作为默认入口,可以直接终端输入 webpack 来查看打包

我们在 index.js 中写入了 console.log(‘index.js’)
打包完成后可以看到 dist 文件夹下多出了 main.js
Node 运行一下就可看到输出:
|
|
细心的你应该会看到终端的黄色警告提示:
|
|
这是因为 webpack 打包要指定打包环境,开发以及生产环境:webpack --mode=development
或者 webpack --mode=production
区别在于代码会不会帮你做自动压缩
接下来根目录手动创建 webpack.config.js
|
|
简单编辑下:
|
|
webpack 配置文件我们已经定义好,接下来编辑 package.json 中的 scripts 字段,让webpack 打包的时候 使用我们定义好的配置打包
|
|
|
|
查看 dist 文件夹下已经成功打包的 bundle.js 文件
接下来你可能会考虑,如果我们有多个入口呢?我们在改写一下 webpack.config.js
|
|
继续执行 npm run dev ,结果如下:
|
|
可以看到预期的文件输出。
注意:[name] 的含义就是根据入口文件的名称来进行打包
接下来安装 webpack-dev-server ,并简单配置一下
|
|
|
|
同样再去 package.json 设置脚本运行
|
|
npm run dev 出现如下结果表示运行成功

接下来需要配置一下 html 模板,虽然webpack帮我们打包了js,但是我们不能每次都去html中引用打包生成的js吧,所以借用一个插件来帮我们实现 js 的自动引入
安装插件 html-webpack-plugin
|
|
配置 webpack 配置(多页面)
|
|
重新编译打包,审查元素会看到,已经自动帮我们吧 js 引入到了html中:

loader可以针对各类引入的资源做转换加载,解析成浏览器能解析的格式
CSS loader
|
|
引入less
文件的话,也需要安装对应的 loader
,此处以sass为例
|
|
新建 index.sass 并在 index.js 中引入
|
|
编辑 webpack modules 配置
|
|
重新打包编译发现,此时打包后的 css 是以行内样式的标签引进的,我们更希望用 link 的方式引进,需要用一个插件 extract-text-webpack-plugin
插件,它功效在于将 css 文件 拆分提取
安装 extract-text-webpack-plugin 插件
|
|
配置 CSS loader
|
|
webpack 4 采用mini-css-extract-plugin
|
|
重新打包编译,查看页面如下:

同理 图片引用 我们需要用到 file-loader 和 url-loader
|
|
页面 img 标签 引用图片
|
|
引用字体和svg 可以用 file-loader
|
|
基本的引用就差不多这些,接下来需要对 CSS 做一些优化
例如:我们想自动根据浏览器来为我们声明的 CSS3 添加兼容前缀,我们需要用到:
postcss autoprefixer
|
|
CSS 模块化
|
|
要启用 CSS 模块化,我们需要设置 css-loader 的 module 选项为 true。
importLoaders 选项表示在 css-loader 之前应用多少个加载器。
例如,sass-loader 必须先于 css-loader 出现。localIdentName 允许配置生成的标识:
- [name]:css 文件名称
- [local]:类/id 的名称
- [hash:base64]:随机生成的 hash,它在每个组件的 CSS 中都是唯一的
消除未使用的css
|
|
测试一下,在引用的css中定义一个未使用的样式声明,编译打包后查看编译后的css 文件,是不是已经被清除了
babel7 转义ES6和react
笔者使用的 babel7 ,接下来安装
|
|
- babel-loader:使用 Babel 转换 JavaScript依赖关系的 Webpack 加载器
- @babel/core:即 babel-core,将 ES6 代码转换为 ES5
- @babel/preset-env:即 babel-preset-env,根据您要支持的浏览器,决定使用哪些 transformations / plugins 和 polyfills,例如为旧浏览器提供现代浏览器的新特性
- @babel/preset-react:即 babel-preset-react,针对所有 React 插件的 Babel 预设,例如将 JSX 转换为函数
|
|
清理 dist 文件夹
每次 build 之后都会重新生成文件至 dist 文件夹,我们需要每次 编译后自动清除 dist 文件夹内容,借助插件 clean-webpack-plugin
|
|
提取公共代码
|
|
配置 dev-server
|
|
devtool优化
|
|
热更新
|
|
webpack merge
|
|
eslint
统一的代码风格对于团队合作不可或缺。
|
|
稍后我们可以在该文件中指定规则,但首先我们要在Webpack配置文件中引入该文件。
plugins中定义:
|
|
添加完成运行会发现 ES6 语法会报错
我们可以通过 babel-eslint 来检测ES6代码
|
|
添加规则
|
|
安装之后,我们可以使用react插件来指定我们关于react的第一条代码规则。比如我们要求组件指定PropTypes
|
|
pre-commit
git pre-commit 提交前检测 如果检测失败则禁止提交。可以在很大一定程度上保证代码质量
|
|