webpack最佳入门实践系列(2)
3.插件
在前端迅速发展的今天,许多没有太多技术含量并且感觉是在浪费时间的事情,就可以交给构建工具来做,例如:我们去手动创建index.html,手动引入打包好的js文件等操作,都可以叫个webpack来做,帮助我们提升效率,因此,你只需要理解,插件其实就是webpack的一些扩展功能,旨在帮助我们提示效率的工具
3.1.html-webpack-plugin插件
这个插件就是帮我们自动生成html文件并且自动引入打包好的js文件
1.插件安装
npm install html-webpack-plugin --save-dev
2.修改webpack配置,让插件生效
const path = require('path') // 引入插件 const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'app.js' }, plugins: [ //添加插件 new HtmlWebpackPlugin() ] }
3.运行查看效果
npm run dev
4.其他常用配置项目
const path = require('path') // 引入插件 const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'app.js' }, plugins: [ //添加插件 new HtmlWebpackPlugin( //在这个插件内部,可以指定模版和自定义生成的文件名 { filename: 'main.html', template: 'src/index.html' } ) ] }
有了上面两个配置后,这个插件帮助生成一个main.html,并且是基于template生成的
4.devserver
webpack-dev-server 为你提供了一个简单的 web 服务器,并且能够实时重新加载(live reloading)。
4.1.安装webpack-dev-server
npm install webpack-dev-server --save-dev
修改package.json配置文件,在script选项中加入下面代码:
"start": "webpack-dev-server",
整个package.json配置文件如下:
{ "name": "code", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "dev": "./node_modules/webpack/bin/webpack.js", "start": "webpack-dev-server", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "html-webpack-plugin": "^2.30.1", "webpack": "^3.10.0" } }
在终端运行命令:
npm start
命令启动后,通过http://localhost:8080/ 访问
4.2.让工具自动给我们打开服务器地址
在webpack.config.js中添加配置
devServer:{ open: true }
其中open:true 表示自动打开浏览器
4.3.修改服务器端口
在webpack.config.js中添加配置项目
devServer:{ open: true, port: 8090 }
其中port后面给一个自定义端口
4.4.设置默认访问目录
devServer:{ open: true, port: 8090, contentBase: './dist' }
5.loader
5.1.什么是loader?
loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。
本质上,webpack loader 将所有类型的文件,转换为应用程序的依赖图可以直接引用的模块。
在更高层面,在 webpack 的配置中 loader 有两个目标。
- 识别出应该被对应的 loader 进行转换的那些文件。(使用 test 属性)
- 转换这些文件,从而使其能够被添加到依赖图中(并且最终添加到 bundle 中)(use 属性)
总结:有了loader,webpack就会把非js文件也看成是模块,并且可以引用它
5.2.支持css文件打包
安装css-loader
npm install css-loader --save-dev
修改webpack.config.js文件,添加css-loader配置项
module:{ rules: [ { test: /\.css$/, use: ['css-loader'] } ] }
完整webpack.config.js文件:
const path = require("path") const HtmlWebpackPlugin = require("html-webpack-plugin") module.exports = { entry: "./src/index.js", output: { path: path.resolve(__dirname, 'dist'), filename: 'app.js' }, plugins: [ new HtmlWebpackPlugin({ template:'./src/index.html', filename:'index.html' }) ], devServer:{ open: true, contentBase: './dist' }, module:{ rules: [ { test: /\.css$/, use: ['css-loader'] } ] } }
配置完成后,测试是否生效,首先新建index.css,添加内容:
body{ background: #009f95 }
在index.js文件中引入 index.css文件
import module_1 from './module_1' import module_2 from './module_2' import module_3 from './module_3' document.write("hello world") import "./index.css" module_1() module_2() module_3()
运行命令,查看效果:
npm start
此时,发现并没有任何效果,原因是css-loader只负责把css文件打包到js中,并没有加入到index.html结构中, 还需要引入style-loader来处理,让style样式加入到index.html结构中
npm install style-loader --save-dev
接下来,需要把style-loader配置到webpack.config.js文件中
module:{ rules: [ { test: /\.css$/, use: ['style-loader','css-loader'] } ] }
再次运行 npm start 查看效果