13、babel转换ES6、es7/8
Babel是什么
Babel其实是一个编译JavaScript的平台,它的强大之处表现在可以通过便宜帮你达到以下目的:
使用下一代的javaScript代码(ES6,ES7….),即使这些标准目前并未被当前的浏览器完全支持。
使用基于JavaScript进行了扩展的语言,比如React的JSX。
需要安装的包
cnpm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
在webpack中配置Babel的方法如下
{ test:/\.(jsx|js)$/, use:{ loader:'babel-loader', options:{ presets:[ "es2015","react" ] } },
//排除目录 exclude:/node_modules/ }
.babelrc配置
虽然Babel可以直接在webpack.config.js中进行配置,但是考虑到babel具有非常多的配置选项,如果卸载webapck.config.js中会非常的雍长不可阅读, 所以我们经常把配置卸载.babelrc文件里。 在项目根目录新建.babelrc文件,并把配置写到文件里 { "presets":["react","es2015"] }
ENV
现在网络上已经不流行babel-preset-es2015,现在官方推荐使用的是babel-preset-env,那我们为了紧跟潮流,我们在讲一下env的配置方法。
首先下载安装包
npm install --save-dev babel-preset-env
然后修改.babelrc里的配置文件。其实只要把之前的es2015换成env就可以了。 { "presets":["react","env"] }
目录
webpack.config.js配置文件
// node中的引入路径模块 const path = require('path'); // 检查html模板,所以我们需要引入node的glob对象使用 配合purifycss-webpack使用 查找 const glob = require('glob'); // 引入webpack const webpack = require('webpack'); // 打包html const htmlPlugin = require('html-webpack-plugin'); // 压缩js const uglify = require('uglifyjs-webpack-plugin'); // 从js中分离css插件 const extractTextPlugin = require("extract-text-webpack-plugin"); // 消除无用的css 比如你写一个#demo 如果页面没有这个id 则会被消除 const PurifyCSSPlugin = require("purifycss-webpack"); // 为处理路径 设置一个 绝对路径 var website = { publicPath: "http://192.168.1.101:9080/" } module.exports = { //入口文件的配置项 entry: { entry: './src/js/entry.js' }, //出口文件的配置项 output: { //输出的路径,用了Node语法 path: path.resolve(__dirname, 'dist'), //输出的目录以及文件名称 filename: 'js/bundle.js', // 处理分离后css路径对不上问题 publicPath: website.publicPath }, //模块:例如解读CSS,图片如何转换,压缩 module: { rules: [ { // 用于匹配处理文件的扩展名的表达式,这个选项是必须进行配置的; test: /\.css$/, // 引用分离css的plugin use: extractTextPlugin.extract({ fallback: 'style-loader', use: [{ loader: 'css-loader', options: { importLoaders: 1 } }, // 给css加前缀 'postcss-loader' ] }) }, { test: /\.(png|jpg|gif)/, // 指定使用的loader和loader的配置参数 use: [{ loader: 'url-loader', options: { // 把小于500000B(488kb)的文件打成Base64的格式,写入JS 小于则帮你复制图片过去并引入 // limit:500000 // 现在是以图片形式引入 limit: 50, // 指定图片输出的目录 outputPath: 'images/' } }] }, { test:/\.(jsx|js)$/, use:{ loader:'babel-loader', }, // 排除目录选项 exclude:/node_modules/ } ] }, //插件,用于生产模版和各项功能 plugins: [ // new uglify(), new htmlPlugin({ // 是对html文件进行压缩,removeAttrubuteQuotes是却掉属性的双引号 minify: { removeAttributeQuotes: true }, // 为了开发中js有缓存效果,所以加入hash,这样可以有效避免缓存JS hash: true, // 是要打包的html模版路径和文件名称 template: './src/index.html' }), // 从js中分离css /css/index.css是设置分离后的路径 除此之外还要修改css-loader的写法 // 分离出来后图片路径不对 用publicPath解决 在output中设置 new extractTextPlugin("css/index.css"), // 消除无用的css new PurifyCSSPlugin({ // 路径扫描 paths: glob.sync(path.join(__dirname, 'src/*.html')), }) ], //配置webpack开发服务功能 devServer: { //设置基本目录结构 contentBase: path.resolve(__dirname, 'dist'), //服务器的IP地址,可以使用IP也可以使用localhost host: '192.168.1.101', //服务端压缩是否开启 compress: true, //配置服务端口号 port: 9080 } }
package.json依赖项
{ "name": "xz", "version": "1.0.0", "description": "", "main": "webpack.config.js", "scripts": { "start": "webpack-dev-server" }, "author": "", "license": "ISC", "devDependencies": { "autoprefixer": "^7.1.6", "babel-core": "^6.26.0", "babel-loader": "^7.1.2", "babel-preset-env": "^1.6.1", "babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.24.1", "css-loader": "^0.28.7", "extract-text-webpack-plugin": "^3.0.1", "file-loader": "^1.1.5", "html-webpack-plugin": "^2.30.1", "postcss-loader": "^2.0.8", "purify-css": "^1.2.5", "purifycss-webpack": "^0.7.0", "style-loader": "^0.19.0", "url-loader": "^0.6.2", "webpack": "^3.8.1", "webpack-dev-server": "^2.9.3" } }
打包命令
npm start 开发环境 webpack 生产环境
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示