注1:全文中安装插件写为了cnpm,个人比较推荐yarn进行安装,cnpm与yarn的区别,可查看之前转载的博客npm与yarn的区别
注2:注意webpack的版本间的兼容性;
module: { // 用来配置第三方loader模块的
rules: [ // 文件的匹配规则
{ test: /\.css$/, use: ['style-loader', 'css-loader'] }//处理css文件的规则
]
}
{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }
{ test: /\.(png|jpg|gif)$/, use: 'url-loader' }
{ test: /\.(png|jpg|gif)$/, use: 'url-loader?limit=43960' },
{ test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }
cnpm i babel-core babel-loader babel-plugin-transform-runtime --save-dev
安装babel的相关loader包说明:
babel-core
:允许我们去调用babel的api,可以将js代码分析成ast(抽象语法树),方便各个插件分析语法进行相应的处理.
babel-loader
:在import或加载模块时,对es6代码进行预处理,es6语法转化为es5语法。
babel-loader:在import或加载模块时,对es6代码进行预处理,es6语法转化为es5语法。
babel-polyfill
:它效仿一个完整的ES2015+环境,使得我们能够使用新的内置对象比如 Promise,静态方法比如Array.from 或者 Object.assign, 实例方法比如 Array.prototype.includes 和生成器函数(提供给你使用 regenerator 插件)。为了达到这一点, polyfill 添加到了全局范围,就像原生类型比如 String 一样。
babel-runtime babel-plugin-transform-runtime
:与babel-polyfill作用一样,使用场景不一样。
cnpm i babel-preset-es2015 babel-preset-stage-0 --save-dev
安装babel转换的语法{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
注意,一定要把node_modules文件夹添加到排除项:在项目根目录中新建 .gitignore
文件并添加:
node_modules
.idea
.vscode
.git
{
"presets":["es2015", "stage-0"],
"plugins":["transform-runtime"]
}
//这个配置文件,其实就是一个js文件,通过node中的模块操作,向外暴露了一个配置对象
const path = require('path');
//导入再内存中生成HTML 页面的插件
//只要是插件,都一定要放到plugins节点中去
// htmlWebpackPlugin 插件的两个作用:
// 1.自动在内存中根据指定页面生成一个内存的页面
// 2.自动把打包好的 bundle.js追加到页面中
const htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: path.join(__dirname, './src/main.js'),
output: {
path: path.join(__dirname, './dist'),
filename: 'bundle.js'
},
plugins: [
new htmlWebpackPlugin({
template: path.join(__dirname, "./src/index.html"),//指定模板页面,将来会根据指定的页面路径,去生成内存中的页面
filename: 'index.html' //指定生成的页面的名称
})
],
module: { //节点,用于配置所有第三方模块加载器
rules: [ //所有第三方模块的匹配规则
{ test: /\.css$/, use: ['style-loader', 'css-loader'] }, //配置处理 .css文件的第三方loader规则
{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }, //配置处理 .less文件的第三方loader规则
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, // 处理 scss 文件的 loader
{ test: /\.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader' }, //配置处理图片路径的第三方loader规则
//limit 给定的值,是图片的大小, 单位是字节byte, 如果引用的图片,大于或者等于给定的limit值,则不会转为base64格式的字符串
//如小于,则会被转为base64格式的字符串
{ test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }, //处理字体文件
{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }, //配置babel 来转换高级的js 语法
{ test: /\.vue$/, use: 'vue-loader' } // 处理 .vue 文件的 loader
]
}
};
附上两个学习链接:
babel-preset-env:你需要的唯一Babel插件
Runtime transform 运行时编译es6