【Webpack】与【Babel】详细说明介绍

Webpack

webpack是一个前端资源加载/打包工具,会根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源

在开始前你需要先理解一些核心概念:

入口(entry),出口(output),loader,插件(plugins),模式(mode),展示如下:

const path = require("path")
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
 
// 打包规则
module.exports = {
 //入口函数
 entry:"./src/main.js",
 //出口
 output:{
   path:path.resolve(__dirname,"./dist"),//编译成功后 文件输出到哪
   filename:"bundle.js"//命名
},
 //loader 用于转换某些类型的模块
 module:{
  rules:[{
   test:/\.css$/, //把项目中所有的.css结尾的文件进行打包
   use:["style-loader","css-loader"] //使用哪个 loader
  }]
 },
 //plugins(插件)则可以用于执行范围更广的任务;包括:打包优化,资源管理,注入环境变量
  plugins:[  
  new HtmlWebpackPlugin({
    template: path.join(__dirname, '/index.html'),
  }),
  new CleanWebpackPlugin()
 ],
 //模式 development=》开发模式, production=》生产、发布上线模式
 mode: 'production'
}
分享18个webpack插件,你千万要收藏好,留备用 (qq.com)

Webpack打包js文件

  • 创建一个文件夹,cmd进入到终端,运行npm install -g webpack webpack-cli安装webpack webpack-cli,然后-v查看是否成功

  • 再运行npm init -y 得到package.json文件

  • 创建src文件夹,然后定义三个js文件,代码如下:

//textOne.js
exports.info = function(str){
   console.log(str);
   document.write(str);
}
//textTwo.js
exports.add = (a,b)=>{
   return a+b;
}
//main.js
const textOne = require("./textOne");
const textTwo = require("./textTwo");

one.info("hello world,"+two.add(52,25));
  • 根目录下新建webpack.config.js文件,然后配置如下:

const path = require("path");

// 打包规则
module.exports = {
  //入口函数
  entry:"./src/main.js",
  //编译成功后 文件输出到哪
  output:{
    path:path.resolve(__dirname,"./dist"),
    filename:"bundle.js"
  }
}
  • 在根目录运行:webpack,即可开始打包

  • 可以在dist目录下新建html文件,然后引用bundle.js,查看效果

Webpack打包css文件

默认webpack打包的时候只会处理JS之间的依赖关系,所以需要配置 webpack 使用 css-loader 跟style-loader 去处理css文件

css-loader 可以识别这个css模块,通过特定的语法规则进行转换内容 最后导出,但由于导出的是数组形式,在页面中无法正常使用,所以又需要style-loader二次处理

使用案例

  • cmd进入根目录终端,运行:npm install --save-dev style-loader css-loader,安装依赖

  • 修改webpack.config.js文件内容:

const path = require("path");

// 打包规则
module.exports = {
  //入口函数
  entry:"./src/main.js",
 //编译成功后 文件输出到哪
 output:{
   path:path.resolve(__dirname,"./dist"),
   filename:"bundle.js"
},
 module:{
  rules:[{
   test:/\.css$/, //把项目中所有的.css结尾的文件进行打包
   use:["style-loader","css-loader"]
  }]
 }
}
  • 在src目录中定义一个css文件,并添加代码:

body{
 background:red;
}
  • 在main.js中引入

require("./style.css")
  • 打开终端,运行:webpack,进行打包,然后打开html查看效果

通过自定义脚本的方式执行webpack

  • 在package.json中配置命令

  • 然后运行npm run dev,进行打包

Webpack打包html文件

首先需要安装html-webpack-plugin插件

npm install --save-dev html-webpack-plugin

新建index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>你好</h1>
</body>
</html>

接着在webpack.config.js文件中进行如下配置

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

module.exports = {
  entry: './index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: 'My HTML5', // HTML标题
      template: './index.html', // 模板文件
    }),
  ],
};

然后运行webpack进行打包

Webpack打包图片资源

ps:file-loader 和 url-loader都可以进行图片打包

首先安装file-loader

npm install file-loader --save-dev

然后在 webpack.config.js 文件中进行如下配置:

module.exports = {
  // 入口文件
  entry: './index.js',
  output: {
    // 打包输出文件夹
    path: path.resolve(__dirname, 'dist'),
    // 打包输出文件名称
    filename: 'bundle.js'
  },
  module: {
    rules: [
      // 配置 file-loader 处理图片
      {
        test: /\.(png|jpe?g|gif)$/i,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: '[name].[ext]', // 输出文件名和后缀
              outputPath: 'img/' // 输出路径
            }
          }
        ]
      }
    ]
  }
}

然后新建img文件夹,放一张图片,再到mian.js中使用:

import imgSrc from './img/72.png';

const img = new Image();
img.src = imgSrc;
document.body.appendChild(img);

然后运行webpack进行打包

在打包好的dist目录中新建index.html,引入bundle.js,然后打开html就可以看到图片了

Webpack移动静态资源,不进行打包

安装插件:npm i copy-webpack-plugin -D

根目录新建一个static文件夹,在文件夹下再建一个ac.js,然后填充内容:

const a = 1
const b = 2

对webpack.js进行配置:

const path = require("path");
const copyWebpackPlugin = require('copy-webpack-plugin');

// 打包规则
module.exports = {
    mode: 'development',
    //入口函数
    entry: "./test.js",
    //编译成功后 文件输出到哪
    output: {
        path: path.resolve(__dirname, "./dist"),
        filename: "bundle.js"
    },
    plugins: [
        new copyWebpackPlugin({
            patterns: [  //patterns 选项用于指定要复制的文件和目录的源路径和目标路径
                { from: "static", to: "staticA" }
            ]
        })
    ]
}

再运行webpack打包之后查看,static文件夹下的内容原封不动的复制到了dist目录下:

clean-webpack-plugin

在每次构建之前自动清除输出目录中的所有文件,以便保持输出目录的干净整洁

const path = require("path");
const cleanWebpackPlugin = require('clean-webpack-plugin')

// 打包规则
module.exports = {
    mode: 'development',
    //入口函数
    entry: "./test.js",
    //编译成功后 文件输出到哪
    output: {
        path: path.resolve(__dirname, "./dist"),
        filename: "bundle.js"
    },
    plugins: [
        new cleanWebpackPlugin()
    ]
}

Babel

 ES6的很多语法在浏览器甚至node环境中无法执行,babel就是一个广泛使用的转码器,可以将ES6代码转化成ES5代码

  • 定义一个文件夹,cmd进入到其中,运行npm install -g babel-cli安装,然后可以通过babel --version查看是否安装成功

  • npm init -y初始化一个package.json文件

  • 新建一个src文件夹,src中创建text.js,然后编辑如下ES6代码

//es6
let name = 'ac'
const title = 'ShenZheng'
let arr = [1,3,5,5,1,23,3]
let newArr = arr.map(a=>a*2)
console.log(newArr )
  • 通过node src/text.js运行查看是否成功

  • 根目录创建.babelrc文件,然后记事本打开配置如下:

{
    "presets":["es2015"], //转译的版本
    "plugins":[]
}
  • cdm运行npm install --save-dev babel-preset-es2015,安装转换器

  • 再执行babel src -d dist,就会生成转译后的js代码

  • 对比两个text.js文件中的代码

//es6
let name = 'ac'
const title = 'ShenZheng'
let arr = [1,3,5,5,1,23,3]
let newArr = arr.map(a=>a*2)
console.log(newArr )


//转译后的es5代码
'use strict';

var name = 'ac';
var title = 'ShenZheng';
var arr = [1, 3, 5, 5, 1, 23, 3];
var newArr = arr.map(function (a) {
  return a * 2;
});
console.log(newArr);

通过自定义脚本的方式执行babel

打开package.json配置

  • 删除之前生成的dist目录,然后cmd中输入:npm run dev,一样得到转译后的代码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Webpack中使用Babel是为了在项目中使用最新的JavaScript语法和功能,同时保证在旧版本浏览器中的兼容性。Babel可以将新版本的JavaScript代码转换为较旧版本的代码,以便在不支持新语法的浏览器中运行。 要在Webpack中使用Babel,首先需要安装相关的依赖。可以使用以下命令安装: ``` npm install --save-dev babel-loader @babel/core @babel/preset-env ``` 然后,在Webpack配置文件中配置Babel。假设你的Webpack配置文件名为`webpack.config.js`,可以在该文件中添加以下代码: ```javascript module.exports = { // ...其他配置项 module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'] } } } ] } }; ``` 上述配置中,我们通过`module.rules`数组中的一个规则来告诉Webpack当遇到`.js`文件时,使用`babel-loader`进行转译。我们排除了`node_modules`目录,因为通常不需要对第三方库进行转译。 在Babel的配置中,我们使用了`@babel/preset-env`预设,它可以根据目标环境自动确定需要转译的语法和插件。 除了以上配置外,还可以在项目根目录下创建一个`.babelrc`文件,用于存放Babel的配置项。例如: ```json { "presets": ["@babel/preset-env"] } ``` 这样,Webpack在使用Babel进行转译时,会自动读取`.babelrc`文件中的配置。 这是一个简单的Webpack配置示例,用于在项目中使用Babel。你可以根据自己的需求进行更复杂的配置,例如添加更多的Babel插件或配置不同的预设。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自湖南的阿晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值