配置文件
entry与output
修改之前的文件路径,新增webpack.config.js文件(因为每个项目工程目录不同,所以可以根据需要自己的配置),业务逻辑代码放在src下面。
1 | webpack --config webpack.config.js |
文件目录
1 | |—— dist |
webpack.config.js
1 | const path = require('path'); |
打包JS文件
1 | npx webpack |
也可以配置package.json文件的scripts
1 | { |
1 | npm run build |
提示说明
Hash:本次打包对应的唯一hash值
Version:使用的webpack版本
Time:打包耗时
Build at:打包时间
Asset:打包出来的文件
Size:文件的大小
Chunks:每个打包出来文件对应的id
Chunk Names:每个打包出来文件对应的名字
Entrypoint:入口文件
1 | entry:"./src/index.js",//从哪个文件开始打包 |
如果output
没设置文件名,则打包出来文件就是main.js (打包出来的文件名称就是entry设置的对象的键名.js ),在打包多个文件的时候可以设置
1 | ... |
打包出来的文件是main.js
和sub.js
,在index.html
文件里对这两个js文件的引用,都是在根目录下。
publicPath
如果之后想把js文件布置到cdn
或者服务器
上,可以通过设置publicPath
输出属性,为引用js文件自动添加前缀。
1 | ... |
library
和libraryTaget
1 | ... |
加了这两个之后编译成这样,libraryTarget:'umd'
是兼容各种模块化规范,比如AMD,CMD,CommonJS,还有library:'eft'
是暴露在某个命名空间下(使用script标签引入的方式)。
mode
1 | const path = require('path'); |
loader
用于告诉webpack,对于特定的文件(非js文件)使用怎样的处理方式
举个例子,打包图片类型
和scss类型
文件
1)新建文件,目录如下
1 | |—— assets |
index.html
1 |
|
index.js
1 | import A from './a'; |
a.js
1 | export default function A(){ |
index.scss
1 | body{ |
以及一张 WX20190627-205301@2x.png 图片
2)安装loader
1 | npm install file-loader --save-dev |
备注:postcss-loader
可以在打包的时候为各种存在兼容性问题的css新特性增加前缀(-webkit-,-mozila-)等等。
3)修改webpack.config.js文件
1 | const path = require('path'); |
loader有引入顺序,从右到左,从下到上。
[name],[ext],[hash]这类是占位符,具体可以看文档。
4)打包
1 | npm run build |
新的目录结构,dist目录下文件发生变化
1 | |—— assets |
打开index.html页面,看到head下插入了一个style标签。
plugins
作用:在打包运行到某些时刻的时候,可以做某些事情。
1)举个例子,先新建文件
public/index.html
1 |
|
目录结构
1 | |—— assets |
2)安装两个plugin
1 | npm install html-webpack-plugin -D |
这两个插件其实就是在打包的某个时刻,做某些事情,下面说这两个插件做了些什么。
3)修改webpack.config.js文件
1 | const path = require('path'); |
html-webpack-plugin,设置了默认模板public/index.html
(如果未设置template,会自动生成新的index.html
)到dist目录下,打包完成之后会在生成的dist目录下的index.html
中引入依赖文件。
clean-webpack-plugin,options设置了cleanAfterEveryBuildPatterns和verbose,清除了dist目录下的文件。
4)打包
1 | npm run build |
5)打开 dist/index.html
编译
怎样在文件变化时,自动编译而不用手动执行编译。
1.添加—watch
参数,可以在文件发生改变的时候时时编译,在package.json
文件添加配置
1 | ... |
2.webpackDevServer
监听文件变化,并且自动更新浏览器
安装webpack-dev-server
,修改package.json
和webpack.config.js
1 | npm install webpack-dev-server -D |
1 | ... |
1 | ... |
执行npm run watch
的时候会自动打开浏览器localhost:8000
,并且时时监听文件变,并且自动刷新浏览器化,打包的内容在内存中,没有在dist目录下。
babel
安装依赖包
1 | @babel/preset-env包含es6转es5的规则 |
修改webpack.config.json
1 | ... |
遇到报错:webpack_require(…) is not a function with babel-loader
完整配置文件:
1 | const path = require('path'); |