Babel和Webpack

01 课程简介

Babel

  • Babel 的使用方式
  • 使用 Babel 前的准备工作
  • 使用 Babel 编译 ES6 代码

Webpack

  • Webpack是什么
  • Webpack初体验
  • 核心概念:entry和output 、loader 、plugins
  • 应用:
    • 处理CSS文件
    • 使用 file-loader 处理 CSS 、JS中的图片
    • 使用 html-withimg-loader 处理 HTML 中的图片
    • 使用 url-loader 处理图片
    • 使用 webpack-dev-server 搭建开发环境

02 Bebel

1、认识 Babel

Babel: JavaScript 的编译器,用来将 ES6 的代码,转换成 ES6 之前的代码

在线使用:https://www.babeljs.cn/

编译结果:

  • Babel 本身可以编译 ES6 的大部分语法,比如 let、const、箭头函数、类
  • 但是对于 ES6 新增的 API,比如 Set、Map、Promise 等全局对象,以及一些定义在全局对象上的方法(比如Object.assign/Array.from)都不能直接编译,需要借助其它的模块
  • Babel 一般需要配合 Webpack 来编译模块语法

2、Babel的使用方式

查看最新使用方式地址:https://www.babeljs.cn/setup
在这里插入图片描述

1.Node.js和npm

Node.js 是个平台或者工具,对应浏览器

后端的 JavaScript = ECMAScript + IO + File + …等服务器端的操作

npm:node 包管理工具 npm install

2.安装node.js

安装完成之后,node -v

npm -v 测试是否成功

3.初始化项目

控制台进入项目的目录,输入 npm init,输入项目名babel(注意不能为中文),生成package.json,可以查看生成的内容

4.安装Babel需要的包

如果npm不是使用的淘宝源,可以切换,速度会更快:npm config set registry https://registry.npm.taobao.org

安装最新版本:npm install --save-dev @babel/core @babel/cli

安装课程指定版本:npm install --save-dev @babel/core@7.11.0 @babel/cli@7.10.5

3、使用Babel编译ES6代码

1.执行编译命令

在package.json的scripts下添加babel执行的命令:"build": "babel src -d dist"

意思是:在babel项目下的src文件夹进行编译,并输出到dist文件(-d:输出,等价于:–out-dir)

在babel项目下创建src,在src下创建babel.js,写入如下代码

let name = 'mys';
const age = 18;
const add = (x, y) => x + y;
new Promise((resolve, reject) => {
  resolve('成功');
});
Array.from([1, 2]);
class Person {}
import './index.js';

执行:npm run build

运行完成之后,项目下出现了dist/babel.js文件,但是其内容与src/babel.js一样,说明没有转换成功,原因是需要配置文件.babelrc

2.Babel 的配置文件 .babelrc

安装命令:npm install @babel/preset-env@7.11.0 --save-dev

执行完成之后,package.json中的devDependencies下出现了:"@babel/preset-env": "^7.11.0"

@babel/cli
@babel/core
@babel/preset-env
在项目下创建.babelrc文件,输入:

{
  "presets": ["@babel/preset-env"]
}

删除dist文件夹,重新在控制台执行 npm run build,可以看到dist/babel.js文件已经变化,和babel在线编译的结果一样

03 Webpack

1、认识Webpack

webpack 是静态模块打包器,当 webpack 处理应用程序时,会将所有这些模块打包成一个或多个文件

webpack 可以处理 js/css/图片、图标字体等单位

静态:开发过程中存在于本地的 js/css/图片/图标字体等文件,就是静态的

动态的内容,webpack没办法处理,只能处理静态的

2、Webpack初体验

1.初始化项目

npm init

2.安装 webpack 需要的包

npm install --save-dev webpack-cli@3.3.12 webpack@4.44.1

3.配置 webpack

创建:webpack.config.js,进入webpack官网:https://www.webpackjs.com ,查看webpack打包的方法,复制到webpack.config.js

const path = require('path');

module.exports = {
  mode: 'development', 
  entry: './src/index.js', // 入口文件
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  }
};
// node.js
// 导入:require;导出:module.exports

在package.json的scripts下配置:"webpack": "webpack --config webpack.config.js"

4.编译并测试

npm run webpack

3、Webpack核心概念

1.entry和output

指定入口文件,有单入口文件和多入口文件

// entry: './src/index.js', // 单入口文件
// 有多个入口文件可以按照如下写法
entry: {
  main: './src/index.js',
  search: './src/search.js'
},
// 单入口输出
// output: {
//   path: path.resolve(__dirname, 'dist'),
//   filename: 'bundle.js'
// }
// 多入口输出
output: {
  path: path.resolve(__dirname, 'dist'),
  filename: '[name].js' // 自动根据入口的名字来设置出口的名字
}

2.loader

loader

webpack可以处理js/css/图片,但webpack本身不认识这些文件,需要loader帮助

loader => 让webpack 能够去处理那些非 JS 文件的模块

用什么就加载哪些模块

babel-loader

安装:npm install --save-dev babel-loader@8.1.0

配置babel:.babelrc

配置webpack.config.js

module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /node_modules/,
      loader: 'babel-loader',
    }
  ]
}

https://www.webpackjs.com/loaders/

引入 core-js

安装: npm install --save-dev core-js@3.6.5

在index.js中导入: import "core-js/stable";

打包并测试

npm run webpack

3.plugins

插件

loader 被用于帮助 webpack 处理各种模块,而插件则可以用于执行范围更广的任务

https://www.webpackjs.com/plugins/

html-webpack-plugin

安装:npm install --save-dev html-webpack-plugin@4.3.0

配置 html-webpack-plugin 插件

// 单入口
const HtmlWebpackPlugin = require('html-webpack-plugin')
plugins: [
 new HtmlWebpackPlugin({
   template: './1.html'
 })
]
// 多入口
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html',
      filename: 'index.html',
      chunks: ['index'],
      minify: {
        // 删除 index.html 中的注释
        removeComments: true,
        // 删除 index.html 中的空格
        collapseWhitespace: true,
        // 删除各种 html 标签属性值的双引号
        removeAttributeQuotes: true
      }
    }),
  ]

自动在dist/index.html中添加:<script src="main.js"></script>

4、Webpack应用

1.处理CSS文件
通过loader引入style标签

需要安装:

1.webpack:
npm install --save-dev webpack-cli@3.3.12 webpack@4.44.1
2.html-webpack-plugin:
npm install --save-dev html-webpack-plugin@4.3.0
3.css-loader:
npm install --save-dev css-loader@4.1.1 
4.style-loader:
npm install --save-dev style-loader@1.2.1

配置:

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js',
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        // loader: 'css-loader'
        use: ['style-loader', 'css-loader'] // 顺序:从右往左执行
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html',
      filename: 'index.html'
    })
  ]
}

通过link

安装:npm install --save-dev mini-css-extract-plugin@0.9.0

配置:

const MiniCssExtractPlugin = require('mini-css-extract-plugin')

new MiniCssExtractPlugin({
      filename:'css/[name].css'
    })

2.使用file-loader处理CSS图片

如果是外部的资源,是不需要考虑 webpack 的,只有本地的图片才需要被 webpack 处理

安装file-loader:npm install --save-dev file-loader@6.0.0

配置:

{
  test: /\.(jpg|png|gif)$/,
  use: 'file-loader'
}

将图片的地址改为打包后的图片地址

但是此时图片的地址是有问题的,需要做如下修改:设置MiniCssExtractPlugin的路径

{
        test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              // 设置路径
              publicPath: '../'
            }
          },
          'css-loader'
        ]
      },

或者修改:

      {
        test: /\.(jpg|png|gif)$/,
        use: {
          loader: 'file-loader',
          options: {
            // 指定图片的地址
            name: 'img/[name].[ext]'
          }
        }
      }

5-5/6/7

3.使用 html-withimg-loader 处理 HTML 中的图片

安装:npm install --save-dev html-withimg-loader@0.1.16

{
        test: /\.(htm|html)$/,
        loader: 'html-withimg-loader'
      }

4.使用 url-loader 处理图片

npm install --save-dev url-loader@4.1.0

5.搭建环境

安装:npm install --save-dev webpack-dev-server@3.11.0

scripts下增加:“dev”: “webpack-dev-server --open chrome” //自动更新,不用每次打包

执行:npm run dev

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值