面试题:webpack介绍和简单使用
一、webpack(模块化打包工具) 1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们,最后打包成一个或多个浏览器可识别的js文件 2. 通过设置webpack.config.js 的配置,由于webpack是基于Node构建的,webpack配置文件中所有的合法node语法都可以用 二、安装webpack 2.1先全局安装 cnpm install webpack -g cnpm install webpack-cli -g npm install webpack -g npm install webpack-cli -g yarn global add webpack yarn global add webpack-cli 2.2 测试版本 webpack -V webpack-cli -V 三、简单用一下webpack webpack==》本身之前是打包js 如果要打包:html、css···需要借助一些东西 1、进入项目目录,随便创建一个js文件 ./src/index.js 2、在该目录中下载wepack cnpm install'webpack -S 3、在终端执行:webpack命名就会打包成功
面试题:webpack的入口和输出
javascript// Entry(入口):Webpack 从哪里开始构建依赖图。 module.exports = { entry: './src/index.js', }; // Output(输出):Webpack 打包后的文件存放位置。 module.exports = { output: { path: path.resolve(__dirname, "public"), filename: "zhangsan.js", }, };
面试题:入口多种配置方式
javascript一、多文件打包成一个文件 问题:多个入口文件==》单文件出口 解决: var path = require('path'); module.exports = { entry: ['./src/a.js','./src/b.js'], output:{ path: path.resolve(__dirname, 'dist'), filename:'main.js', } }
javascript二、多文件打包成多文件 问题:多个入口文件==》多文件出口 解决: var path = require('path'); module.exports = { entry: { a:'./src/a.js', b:'./src/b.js', }, output:{ path: path.resolve(__dirname, 'dist'), } }
面试题:loader的概念
一、loader是什么 webpack 只能理解JavaScript 和JSON文件,这是webpack开箱可用的自带能力。loader让webpack能够去处理其他类型的文件,并将它们转换为有效模块,以供应用程序使用,以及被添加到依赖图中。 二、loader的配置 写法:
javascriptmodule:{ rules:[ test: /\.css$/, use:['style-loader','css-loader'], }], }
1、test属性,识别出哪些文件会被转换。 2、use属性,定义出在进行转换时,应该使用哪个loader。 ****一定要记住下载loader
面试题:压缩打包HTML
插件:html-webpack-plugin 使用步骤: 1.下载 cnpm install html-webpack-plugin -S 2.引入 var HtmlWebpackPlugin = require('html-webpack-plugin'); 3.配置 plugins:[ new HtmlWebpackPlugin({ }) ] 4.配置参数说明 4.1 指定模版页面 template:'./src/index.html', 4.2 修改默认输出文件名 filename:'xx.html' 4.3 允许插入到模板中的一些chunk chunks:['jquery','xx'] 4.4 配置不允许注入的thunk excludeChunks:['xx'] 5.多页面打包 需要创建多个newHtmlWebpackPlugin
面试题:HTML加入图片
一、加载图片的loader ==> file-loader
javascript{ test: /\.(png|jpg|jpeg|gif)$/, use:[{ loader:'file-loader', options:{ esModule:false, outputPath:'img/' } }] }
二、让html支持图片的loader ==> html-withimg-loader
javascript{ test:/\.html$/, use:'html-withimg-loader' }
面试题:HTML加入字体图标
添加字体图标:
javascript{ test: /\.(eot|svg|ttf|woff|woff2)$/, use:'file-loader?name=./fonts/[name].[ext]' }
面试题:单独分离CSS压缩打包
压缩打包css 1.单独抽离css文件 1.1下载插件: :mini-css-extract-plugin 1.2 引入插件: Var MiniCssExtractPlugin require('mini-css-extract-plugin'); 1.3修改loader: { test:/\.css$/, use: [MiniCssExtractPlugin.loader,'css-loader'] } 1.4使用插件 plugins:[ new MiniCssExtractPlugin() ] 2.压缩css文件 插件:optimize-css-assets-webpack-plugin -S
面试题:webpack的loader和plugin的区别?
Loader:用于模块源码的转换,loader描述了webpack如何处理非JS模块,并且在buld中引入这些依赖。loader可以将文件从不同的语言转换为JS,或者将内联图转换为data URL。比如:CSS-Loader,Style-Loader等 Plugin:用于解决loader无法实现的其实事情,从打包优化和压缩,到重新定义环境变量,功能强大到可以用来处理各种各样的任务。webpack提供了很多开箱即用的插件,例如:CommonPlugin主要用于提取第三方库和公共模块,避免首屏加载的bundle文件,或者按需加载的bundle文件体积过大,导致加载时间过长,是一把优化的利器。而在多页面应用中,更是能够为每个页面文件的应用程序共享代码创建的bundle
面试题:怎么使用webpack对项目进行优化?
构建优化: 1、减少编译体积ContextReplacementPugin、lgnorePlugin、babel-plugin-import、babel-plugin-transform-runtime。 2、并行编译happypack、thread-loader、uglifyWebpackPlugin开启并行 3、缓存cache-loader、hard-source-webpack-plugin、uglifyjsWebpackPlugin开启缓存、babel-loader开启缓存 4、预编译dllWebpackPlugin&&DllReferencePlugin、auto-dll-webpack-plugin 性能优化: 1、减少编译体积Tree-shaking、Scope-Hositing 2、hash缓存webpack-md5-plugin 3、拆包 splitChunksPlugin、import()、require.ensure