第四章 webpack5处理js资源

简介: 介绍如何处理兼容性的js代码

  在webpack5的官方文档中已经说明,webpack是会自动处理JavaScript和JSON资源的,这里为什么还要我们单独处理呢?

  原因是 Webpack 对 js 处理是有限的,只能编译 js 中 ES 模块化语法,不能编译其他语法,导致 js 不能在 IE 等浏览器运行,所以我们希望做一些兼容性处理。

其次开发中,团队对代码格式是有严格要求的,我们不能由肉眼去检测代码格式,需要使用专业的工具来检测。

  • 针对 js 兼容性处理,我们使用 Babel 来完成
  • 针对代码格式,我们使用 Eslint 来完成

我们先完成 Eslint,检测代码格式无误后,在由 Babel 做代码兼容性处理


ESlint

详情可参见:ESlint中文文档 是一款可组装的JavaScript和JSX检查工具。

我们使用 Eslint,关键是写 Eslint 配置文件,里面写上各种 rules 规则,将来运行 Eslint 时就会以写的规则对代码进行检查

1.配置文件

  • 文件命名.eslintrc.eslintrc.js.eslintrc.json 区别在于配置的格式不同,功能相同。
  • 文件位置:位于相同根目录。
  • package.json中的eslintConfig: 不需要创建文件,在原有文件基础上写ESLint 会查找和自动读取它们,所以以上配置文件只需要存在一个即可。

2.具体配置

.eslintrc.js配置文件为例:

module.exports = {
  // 解析选项
  parserOptions: {},
  // 具体检查规则
  rules: {},
  // 继承其他规则
  extends: [],
  // ...
};

其他规则详见

  • parserOptions 解析选项
parserOptions: {
  ecmaVersion: 6, // ES 语法版本
  sourceType: "module", // ES 模块化
  ecmaFeatures: { // ES 其他特性
    jsx: true // 如果是 React 项目,就需要开启 jsx 语法
  }
}
  • rules 具体规则

    1. "off"0 - 关闭规则
    2. "warn"1 - 开启规则,使用警告级别的错误:warn (不会导致程序退出)
    3. "error"2 - 开启规则,使用错误级别的错误:error (当被触发的时候,程序会退出)
rules: {
  semi: "error", // 禁止使用分号
  'array-callback-return': 'warn', // 强制数组方法的回调函数中有 return 语句,否则警告
  'default-case': [
    'warn', // 要求 switch 语句中有 default 分支,否则警告
    { commentPattern: '^no default$' } // 允许在最后注释 no default, 就不会有警告了
  ],
  eqeqeq: [
    'warn', // 强制使用 === 和 !==,否则警告
    'smart' // https://eslint.bootcss.com/docs/rules/eqeqeq#smart 除了少数情况下不会有警告
  ],
}

具体详情参见:ESlint规则文档

  • extends 继承

开发中一点点写 rules 规则太费劲了,所以有更好的办法,继承现有的规则。

现有以下较为有名的规则:

  1. Eslint 官方的规则 : eslint:recommended

    1. Vue Cli 官方规则plugin:vue/essential
    1. React Cli 官方规则react-app
// 例如在React项目中,我们可以这样写配置
module.exports = {
  extends: ["react-app"],
  rules: {
    // 我们的规则会覆盖掉react-app的规则
    // 所以想要修改规则直接改就是了
    eqeqeq: ["warn", "smart"],
  },
};

3. 在Webpack中的使用

  • 需要安装的依赖包
npm i eslint-webpack-plugin eslint -D
  • 定义ESlint 配置文件

文件名:.eslinrc.js

module.exports = {
  // 继承 Eslint 规则
  extends: ["eslint:recommended"],
  env: {
    node: true, // 启用node中全局变量
    browser: true, // 启用浏览器中全局变量
  },
  parserOptions: {
    ecmaVersion: 6,
    sourceType: "module",
  },
  rules: {
    "no-var": 2, // 不能使用 var 定义变量
  },
};
  • 修改js文件代码

文件名:main.js

import add from "./js/add";

var result1 = add(2 , 1); // 计算1+2,测试代码
console.log(result1);
  • 在webpack配置中使用插件

文件名:webpack.config.js

const path = require("path");
const ESLintWebpackPlugin = require("eslint-webpack-plugin"); 
// ...
plugins: [
    new ESLintWebpackPlugin({
      // 指定检查文件的根目录
      context: path.resolve(__dirname, "src"),
    }),
  ],
  • 配置完成后可以启动webpack,在控制台查看效果
npx webpack

4. VSCode Eslint 插件

  如果你使用的开发工具是VSCode的话,可以安装ESlint插件,即可不用编译就能看到错误,可以提前解决。

但是此时就会对项目所有文件默认进行 Eslint 检查了,我们 dist 目录下的打包后文件就会报错。但是我们只需要检查 src 下面的文件,不需要检查 dist 下面的文件。

所以可以使用 Eslint 忽略文件解决。在项目根目录新建下面文件:

文件名:.eslintignore

文件位置:项目根目录

# 忽略dist目录下所有文件
dist

Babel

官方文档:

Babel 是一个 JavaScript 编译器,主要用于将采用 ECMAScript 2015+ 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。下面列出的是 Babel 能为你做的事情:

  • 语法转换
  • 通过 Polyfill 方式在目标环境中添加缺失的特性 (通过引入第三方 polyfill 模块,例如 core-js
  • 源码转换(codemods)
  • 更多参考资料!

1. 配置文件

  • 文件命名babel.config.jsbabel.config.json.babelrc.babelrc.js.babelrc.json,写法不一,功能一致
  • 文件位置:项目根目录
  • package.jsonbabel: 不需要创建文件,在原有文件基础上写Babel 会查找和自动读取它们,所以以上配置文件只需要存在一个即可

2. 具体配置

文件名:babel.config.js

module.exports = {
  // 预设
  presets: [],
};
  • presets预设

单理解:就是一组 Babel 插件, 扩展 Babel 功能

 1. `@babel/preset-env`: 一个智能预设,允许您使用最新的 JavaScript。
 2. `@babel/preset-react`:一个用来编译 React jsx 语法的预设。
 3. `@babel/preset-typescript`:一个用来编译 TypeScript 语法的预设。

3. 在webpack的配置中启用

  • 安装所需要的依赖包
npm i babel-loader @babel/core @babel/preset-env -D
  • 定义 Babel 配置文件

文件名:babel.config.js

module.exports = {
  presets: ["@babel/preset-env"],
};
  • webpack配置

文件名:webpack.config.js

module: {
    rules: [
     // ...
      {
        test: /\.js$/,
        exclude: /node_modules/, // 排除node_modules代码不编译
        loader: "babel-loader",
      },
    ],
  },
  • 运行webpack
npx webpack

打开打包后的 dist/static/js/main.js 文件查看,会发现箭头函数等 ES6 语法已经转换了。

相关文章
|
6月前
|
缓存 JavaScript 前端开发
js开发:请解释什么是Webpack,以及它在项目中的作用。
Webpack是开源的JavaScript模块打包器,用于前端项目构建,整合并优化JavaScript、CSS、图片等资源。它实现模块打包、代码分割以提升加载速度,同时进行资源优化和缓存。借助插件机制扩展功能,并支持热更新,加速开发流程。
62 4
|
1月前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
46 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
30天前
|
前端开发 UED
Webpack 中处理 CSS 和图片资源的多 Loader 配置
【10月更文挑战第12天】 处理 CSS 和图片资源是 Webpack 配置中的重要部分。通过合理选择和配置多个 Loader,可以实现对这些资源的精细处理和优化,提升项目的性能和用户体验。在实际应用中,需要不断探索和实践,根据项目的具体情况进行灵活调整和优化,以达到最佳的处理效果。通过对 Webpack 中多 Loader 处理 CSS 和图片资源的深入了解和掌握,你将能够更好地应对各种复杂的资源处理需求,为项目的成功构建和运行提供坚实的基础。
53 1
|
2月前
|
前端开发
umi webpack配置图片资源转base64
umi webpack配置图片资源转base64
|
3月前
|
JavaScript 前端开发 API
解锁前端开发新境界:Vue.js携手Webpack,打造高效构建流程,你的项目值得拥有!
【8月更文挑战第30天】随着前端技术的发展,模块化与组件化趋势愈发显著。Vue.js 以其简洁的 API 和灵活的组件系统,深受开发者喜爱;Webpack 则凭借强大的模块打包能力成为前端工程化的基石。两者结合,不仅简化了组件编写与引用,还通过模块热替换、代码分割等功能大幅提升开发效率。本文将通过具体示例,展示如何利用 Vue.js 和 Webpack 构建高效、有序的前端开发环境。从安装配置到实际应用,逐步解析这一组合的优势所在。
49 0
|
4月前
|
JavaScript Windows
安装node.js与webpack创建vue2项目
安装node.js与webpack创建vue2项目
35 1
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的线上学习资源智能推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的线上学习资源智能推荐系统附带文章源码部署视频讲解等
63 5
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的高校实验室资源综合管理系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的高校实验室资源综合管理系统附带文章和源代码部署视频讲解等
41 5
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的学习资源推送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的学习资源推送系统附带文章源码部署视频讲解等
38 0
|
4月前
|
JavaScript
文本,Pinia的使用,(0 , _stores_token_js__WEBPACK_IMPORTED_MODULE_1__.useTokenStore),接口中必须用引入store.js文件
文本,Pinia的使用,(0 , _stores_token_js__WEBPACK_IMPORTED_MODULE_1__.useTokenStore),接口中必须用引入store.js文件