前端工程化第二章:webpack基础(中)

文章目录

  • 1. 处理css资源(css文件拆分 mini-css-extract-plugin)
    • 1.1. package.json
    • 1.2. webpack.config.js
  • 2. 处理预编译器(less/scss)
    • 2.1. src/index.js
    • 2.2. src/index.less
    • 2.3. src/index.scss
    • 2.4. webpack.config.js
  • 3. 适配(postCss)
    • 3.1. webpack.config.js
    • 3.2. postcss.config.js
    • 3.3. .browserslistrc
    • 3.4. src/index.less
  • 4. 高级语法转换低级语法(babel)
    • 4.1. webpack.config.js
    • 4.2. .babelrc(和babel.config.js文件配置其中一个就行)
    • 4.3. babel.config.js(和.babelrc文件配置其中一个就行)
    • 4.4. src/index.js

1. 处理css资源(css文件拆分 mini-css-extract-plugin)

分析打包后的js文件,可以看到js和css代码都放在同一个文件中,那么如果代码较多时,会导致单个文件过大。因此在实际开发中,我们需要将js和css代码拆分出来,生成单独的css文件。
前端工程化第二章:webpack基础(中)_第1张图片
实现思路:维护一个全局变量,控制是生产环境还是开发环境,在 webpack.config.js 文件中通过这个变量处理是否拆分 css 文件(生产环境需要拆分)。

1.1. package.json

"scripts": {
    "dev": "cross-env NODE_ENV=development webpack serve",
    "build": "cross-env NODE_ENV=production webpack"
  },

前端工程化第二章:webpack基础(中)_第2张图片

1.2. webpack.config.js

const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // 将css代码从js文件中拆分出来
module: {
    rules: [
      {
        test: /\.css$/, // 匹配以 .css 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
        ], // 注意:loader执行顺序是从后往前执行,顺序不能改变
      },
    ],
  },
  plugins: [
    // 插件使用时,像构造函数一样直接 new 即可
    // template:模板文件的路径
    // filename:打包后生成的文件名
    // chunk:代码块
    new HtmlWebpackPlugin({ template: "./src/index.html" }),
    new MiniCssExtractPlugin(),
  ],

运行 npm run build 打包项目,可以看到css文件已经生成了

前端工程化第二章:webpack基础(中)_第3张图片

2. 处理预编译器(less/scss)

  • less:Less 是一种 CSS 预处理器,它可以让开发人员使用变量、函数等方式来编写 CSS,让 CSS 更加易于维护和扩展。
  • less-loader:Less-loader 是 Webpack 中的一个 Loader,用于将 Less 代码转换为标准的 CSS 代码。然后在浏览器中使用。
  • sass:同 Less 作用一致
  • sass-loader:同 Less-loader 作用一致
  • stylus:同上
  • stylus-loader:同上

2.1. src/index.js

前端工程化第二章:webpack基础(中)_第4张图片
具体代码如下

import "./index.css";
import "./index.less";
import "./index.scss";
console.log(123);

2.2. src/index.less

前端工程化第二章:webpack基础(中)_第5张图片
具体代码如下

@bgc: yellow;
@color: green;
body {
  background-color: @bgc;
  color: @color;
}

2.3. src/index.scss

前端工程化第二章:webpack基础(中)_第6张图片
具体代码如下

$width: 100px;
body {
  width: $width;
}

2.4. webpack.config.js

module: {
    rules: [
      {
        test: /\.css$/, // 匹配以 .css 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
        ], // 注意:loader执行顺序是从后往前执行,顺序不能改变
      },
      {
        test: /\.less$/, // 匹配以 .less 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
          "less-loader",
        ],
      },
      {
        test: /\.scss$/, // 匹配以 .scss 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
          "sass-loader",
        ],
      },
    ],
  },

运行 npm run build 后查看生成的css文件,可以看到我们设置的样式已经识别并打包进去了

前端工程化第二章:webpack基础(中)_第7张图片
然后我们将dist下的index.html在浏览器打开,可以看到样式已经生效了

前端工程化第二章:webpack基础(中)_第8张图片

3. 适配(postCss)

PostCSS 是一个使用 JavaScript 转换 CSS 的工具。它允许开发人员使用现代语法编写 CSS,然后将其转换为旧版浏览器可以理解的格式。PostCSS 支持各种插件,可以用于对 CSS 执行各种转换,例如添加浏览器前缀优化 CSS 等。

  • postcss.config.js:postcss 的配置文件,可以配置插件等
  • .browserslistrc:配置浏览器的信息

3.1. webpack.config.js

前端工程化第二章:webpack基础(中)_第9张图片
具体代码如下

module: {
    rules: [
      {
        test: /\.css$/, // 匹配以 .css 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
          "postcss-loader",
        ], // 注意:loader执行顺序是从后往前执行,顺序不能改变
      },
      {
        test: /\.less$/, // 匹配以 .less 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
          "postcss-loader",
          "less-loader",
        ],
      },
      {
        test: /\.scss$/, // 匹配以 .scss 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
          "postcss-loader",
          "sass-loader",
        ],
      },
    ],
  },

3.2. postcss.config.js

前端工程化第二章:webpack基础(中)_第10张图片
具体代码如下

module.exports = {
  plugins: [require("autoprefixer")], // 使用 autoprefixer 插件匹配不同的浏览器
};

3.3. .browserslistrc

前端工程化第二章:webpack基础(中)_第11张图片
具体代码如下

# 最新的两个版本
last 2 versions
# 市场份额大于1%
> 1%
# iOS 7 以上的 sofire 浏览器
iOS 7
# sofire 浏览器最新的三个版本
last 3 iOS versions

3.4. src/index.less

测试对于较新的语法,postcss 自动添加浏览器前缀:

前端工程化第二章:webpack基础(中)_第12张图片
运行 npm run build 打包,将打包后的 dist/index.html 在浏览器打开,可以看到前缀已经添加:
前端工程化第二章:webpack基础(中)_第13张图片

4. 高级语法转换低级语法(babel)

  1. Babel 是一个 JavaScript 编译器,它可以将 ECMAScript 2015+ 代码转换为向后兼容的 JavaScript 代码,以便在旧版浏览器或环境中运行。

  2. Babel 可以将最新版本的 JavaScript 代码转换为向后兼容的代码,包括将新的语法特性转换为旧版语法,将模块转换为 CommonJSAMD 等模块系统,以及为旧版浏览器添加缺失的原生 API 等。

  3. Babel 可以与 Webpack 等构建工具一起使用,以便在构建过程中自动将代码转换为兼容的 JavaScript 代码。

  4. 要使用 Babel,只需在项目中安装 Babel 的相关依赖,然后在项目根目录下创建一个 .babelrc 文件,指定要使用的 Babel 插件和预设。(Babel的配置非常灵活,可以通过 .babelrc、babel.config.js、Webpack配置等多种方式来指定需要支持的目标环境)

4.1. webpack.config.js

前端工程化第二章:webpack基础(中)_第14张图片
具体代码如下

{
  test: /\.js$/, // 匹配以 .js 结尾的文件
  use: [
    {
      loader: "babel-loader",
      // options: { // 可以直接在这里配置预设,也可以在 .babelrc 文件中配置,也可以在babel.config.js 中配置
		//	presets: ["@babel/preset-env"]
		//}
    },
  ],
},

4.2. .babelrc(和babel.config.js文件配置其中一个就行)

前端工程化第二章:webpack基础(中)_第15张图片
具体代码如下

{
  "presets": [
      "@babel/preset-env" // 配置 babel 预设
  ]
}

4.3. babel.config.js(和.babelrc文件配置其中一个就行)

module.exports = {
  presets: [
     "@babel/preset-env" // 配置 babel 预设
  ]
}

4.4. src/index.js

测试 babel 代码转换:

前端工程化第二章:webpack基础(中)_第16张图片
具体代码如下

// 测试 babel 将 ES6 代码转换为 ES5 代码
let obj = {
  name: "张三",
  age: 18,
};

let { name, age } = obj;
console.log(name, age);

运行 npm run build 后,可以看到 dist/main.js 中已经将测试代码转成了低级语法:

前端工程化第二章:webpack基础(中)_第17张图片

你可能感兴趣的:(webpack学习,前端,webpack,rust)