用于学习webpack配置的小demo,参考文章
生成 package.json
npm init
package.json文件就绪后,我们在本项目中安装Webpack作为依赖包
生成 node_modules、package-lock.json
#安装到项目目录
npm install --save-dev webpack
#全局安装
npm install -g webpack
1.app
存放原始数据和将写的JavaScript模块
2.public
存放之后供浏览器读取的文件(使用webpack打包生成的js文件+index.html)
# { entry file } 处填写入口文件的路径,本文中即main.js的路径,默认打包到dist文件夹
# 填写路径时不必加{}
webpack { entry file }
执行此语句后可能会需要安装webpack-cli,如果webpack是全局安装的,则对应的webpack-cli也需要全局安装
npm install --save-dev webpack-cli -g
指定入口文件后,webpack可以自动识别所依赖的其他文件
若webpack非全局安装,则需在终端额外指定其在node_modules中的地址(windows系统可能会报错,推荐全局安装webpack)
node_modules/.bin/webpack app/main.js public/bundle.js
配置文件就是一个简单的JavaScript模块,用于存放打包相关的信息
在根目录下新建webpack.config.js文件,配置内容
配置好之后,在终端运行webpack即可(非全局安装需运行node_modules/.bin/webpack),它会自动根据webpack.config.js中的配置进行打包
非全局安装webpack是命令行语句较为繁琐,可通过npm配置后,在命令行中使用npm start替换该语句,这自然是极好的。在package.json中对scripts对象设置"start"字段即可
start命令为特殊脚本名称,命令行中使用npm start即可,其他命令则不同,需使用npm run { script name }方可
在webpack的配置文件中配置source maps,需要配置devtool,有四种不同的配置方法:
- source-map
- cheap-module-source-map
- eval-source-map
- cheap-module-eval-source-map 从上到下打包速度逐渐变快,但是负面问题也越来越多。对于小到中型项目,可以选择eval-source-map,但只应该在开发阶段使用
webpack可提供一个可选的本地开发服务器(基于node.js构建),不过它是一个单独的组件,在webpack中配置之前需将其安装为项目依赖
npm install --save-dev webpack-dev-server
devServer配置选项,更多选项:
- contentBase: 本地服务器提供服务的文件夹,默认为根文件夹
- port:端口号,默认为“8080”
- inline:设置为true,当源文件改变时自动刷新页面
- historyApiFallback: 依赖于HTML5 history API,若设置为true,所有跳转将指向index.html
在webpack.config.js中配置好devServer后,在package.json中配置“scripts”对象的“server”字段以开启本地服务器:
"server": "webpack-dev-server --open"
命令行输入“npm run server”即可在本地对应端口查看结果
通过使用不同的loader,webpack可调用外部脚本或工具,实现对不同格式文件的处理,如scss-->css,ES6、ES7-->现代浏览器兼容的JS文件...
Loaders需单独安装并在webpack.config.js中modules关键字下配置,配置选项如下:
- test:匹配loader所处理文件扩展名的正则表达式
- loader:loader的名称
- include/exclude:可选,手动添加必须处理/屏蔽不需要处理的文件或文件夹
- query:可选,为loaders提供额外的设置选项
Babel是一个编译JavaScript的平台,通过Babel编译代码可以达到以下目的:
- 可使用最新的代码(ES6, ES7),不管当前浏览器是否支持新标准
- 可使用基于JavaScript的扩展语言,如React的JSX
Babel其实是几个模块化的包,核心功能位于称为babel-core的npm包中,webpack可以把不同的包整合到一起使用,对于每一个需要的功能/扩展,都需要安装单独的包(babel-env-preset:解析ES6)
// npm一次性安装多个依赖模块
npm install --save-dev babel-core babel-loader babel-preset-env babel-preset-react
// npm run server时若因babel版本报错,可用以下安装指令
npm install -D babel-loader@7 babel-core babel-preset-env babel-preset-react1
- 在webpack.config.js文件夹下进行配置
- babel具有非常多的配置选项,方法1会使得这个文件过于复杂,因此可bebel选项放在一个名为.babelrc的配置文件中
webpack把所有文件都当作模块处理,JavaScript代码、CSS、fonts、图片通过合适的loader都可以被处理。
工具:
- css-loader:可通过
@import和url(...)实现require()功能 - style-loader:将所有计算后的样式加入页面
// 安装
npm install --save-dev style-loader css-loader
二者组合在一起能够把样式表嵌入webpack打包后的js文件中,安装后在webpack.config.js中配置,这样就可以通过import、require、url等方式引入css文件了
通过css loader中简单配置,在css中运用模块化思想,所有的类名、动画名都只作用于当前模块。这样可以直接把css类名传递到组件中,有效避免了全局污染。
Sass ---> Sass Loader
Less ---> Lass Loader
Loaders:在打包构建过程中处理源文件(jsx、scss、less...),一次处理一个
Plugins:用来拓展webpack功能,不直接操作单个文件,直接对整个构建过程起作用
webpack有很多内置插件,同时也有很多第三方插件。
- 通过
npm安装 - 在webpack.config.js中的plugins关键字部分添加插件实例。
思路:webpack配置文件的output关键字中,输出的文件名用哈希值来区分
添加hash后,会生成很多的文件,这就需要去除残余文件,这就涉及到一个插件:clean-webpack-plugin