You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
npm i vue-loader --save-dev npm i babel-loader --save-dev npm i vue-template-compiler --save-dev webpack主要的用处就是打包一个js文件供浏览器使用,所以webpack只能打包js文件,所以我们需要将非js文件转为js,所以我们就需要webpack中的module选项来配置,具体配置请查看webpack官网
entry: 打包的入口文件 output: 输入的文件, filename字段是打包的文件名字 resolve: 其中的extensions字段说明了,我们引入文件不需要加文件后缀
例如 import A from a.vue,配置了resolve之后我们可以这样写import A from a,就不需要加那个vue的后缀 module: 这个是将各种非js文件转为js文件 include: 该字段告诉我们只处理include定义的目录下的文件
由于js文件可能包含ES6和ES7的语法所以我们使用babel来进行转换为ES5,但是从Babel6.x以上你配置了bable之后,也不能进行工作,我们需要配置.babelrc文件,在根目录vueApplication下创建.babelrc .babelrc
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<title>vapp</title>
</head>
<body>
<divid="app"></div>
<!-- built files will be auto injected -->
<scripttype="text/javascript"src="bundle.js"></script>
</body>
</html>
在命令行中键入npm run start
在浏览器中输入http://localhost:8080/,然后显示index.html index.html
<!DOCTYPE html><html><head><metacharset="utf-8"><metaname="viewport" content="width=device-width,initial-scale=1.0"><title>vapp</title></head><body><divid="app"></div><!-- built files will be auto injected --><scripttype="text/javascript" src="bundle.js"></script></body></html>
每次我们都需要引入bundle.js,但是当打包名字改变的时候我们还需要,重新进行引入,有没有一种方法实现打包文件自动注入index.html文件中,有,npm i html-webpack-plugin --save-dev,我们增加如下条目到webpack.dev.config.js
我们把dist目录下的index.html复制到vueApplication根目录下,删除dist目录下的index.html然后同时删除根目录下index.html中的<script>标签,然后键入npm run start,然后在浏览器中输入http://localhost:8080/发现成功显示 style.css文件打包后也被打包进bundle.js,我们把css文件单独打包出来,mini-css-extract-plugin可以帮助我们,npm i mini-css-extract-plugin --save-dev,修改webpack.config.dev.js
<template><divclass="content"><audioclass="music"controls="controls"v-for="song in songs"
:src="song.url"
:key='song.id'type='audio/mp3'></audio></div></template><script>exportdefault{name:'fileContent',data(){return{songs:[{url:require('../../public/musics/one.mp3'),id:1},{url:require('../../public/musics/two.mp3'),id:2}]}}}</script>
然后npm run build,发现dist目录下多了importComponent.一堆数字.js和bundle.一堆数字.js,这个我们以后再讲,先这么放着,然后我们npm run start,在浏览器中键入http://localhost:8080然后发现会出现如下的界面,在下节主要讲解这个app,这个界面我自己都不忍直视
每次npm run build,都会将文件打包到dist文件夹下,然后会导致dist文件夹越来越大,有没有一种办法,每次打包前都清空dist文件夹中的内容,幸好有CleanWebpackPlugin插件帮助我们清空dist文件夹,首先安装npm i clean-webpack-plugin --save-dev,然后增加如下条目到webpack.dev.config.js文件中 webpack.dev.config.js
从零搭建vue
package.json配置
首先我把我的配置写出来,因为我在这个配置的过程中遇到很多版本的问题,所以我先把自己的配置写出来,首先安装
webpack
npm i webpack-cli --save-dev
npm i webpack --save-dev
初始化项目
首先创建文件夹名字叫做
vueApplication
,然后使用npm init
进行初始化,然后在vueApplication
中生成了一个package.json
创建src文件夹
首先在
vueApplication
文件夹创建src
文件夹,然后在该文件夹下创建App.vue
文件App.vue
然后创建一个
main.js
的文件,将App.vue
mount到html文件上main.js
main.js
文件需要vue
模块,npm i vue --save-dev
创建build文件夹
我们创建
build
文件夹,然后在该文件夹中创建webpack.dev.config.js
webpack.dev.config.js
npm i vue-loader --save-dev
npm i babel-loader --save-dev
npm i vue-template-compiler --save-dev
webpack
主要的用处就是打包一个js文件供浏览器使用,所以webpack
只能打包js
文件,所以我们需要将非js文件转为js,所以我们就需要webpack
中的module
选项来配置,具体配置请查看webpack官网entry:
打包的入口文件output:
输入的文件,filename
字段是打包的文件名字resolve:
其中的extensions
字段说明了,我们引入文件不需要加文件后缀例如
import A from a.vue
,配置了resolve
之后我们可以这样写import A from a
,就不需要加那个vue
的后缀module:
这个是将各种非js
文件转为js
文件include:
该字段告诉我们只处理include
定义的目录下的文件由于
js
文件可能包含ES6
和ES7
的语法所以我们使用babel
来进行转换为ES5
,但是从Babel6.x
以上你配置了bable
之后,也不能进行工作,我们需要配置.babelrc
文件,在根目录vueApplication
下创建.babelrc
.babelrc
babel5.x
提供的是一个babel
包,但是从babel6.x
版本之后,不在提供babel
包,而是提供了一些额外的包,命令行工具由babel-cli
提供,node api
由babel-core
,polyfill
由babel-polyfill
提供,我也是个小白,我以前都是用vue-cli
创建的vue
程序,也是像上面这样写的,但是使用的是babel7.x版本,所以我们需要重新修改.babelrc
.babelrc
npm install --save-dev @babel/preset-stage-2
npm install --save-dev @babel/preset-env
npm install --save-dev @babel/plugin-transform-runtime
npm install --save-dev @babel/core
然后我们我们运行
webpack --config ./build/webpack.dev.config.js
,然后我们发现会出现以下的错误然后我们查看以上给出的网址,在官网查看发现
@babel/preset-stage-2
已经被去除了,我们可以使用babel-upgrade
这个命令,npm install babel-upgrade
,官网给出的解释这个工具是自动更新大多数依赖,配置文件以及js文件,这些文件需要babel
包直接更新到babel7
,然后运行babel-upgrade --write
,这个命令会增加一些配置文件到.babelrc
和package.json
中,所以我们需要npm install
,完成以上步骤之后,然后webpack --config ./build/webpack.dev.config.js
,然后又出现错误了Oh,No,错误如下查阅资料然后我们发现自从
vue-loader 15.x
之后,vue-loader
的使用都是需要伴随VueLoaderPlugin
的,我们在webpack.config.dev.js
中加入suprise-mother-fucker我们打包成功了
然后在打包后生成的
dist
文件夹中创建index.html
index.html
记住我们一定要把
script
放在body
的最下面,这里面的src指向的是我们打包的bundle.js
,记住我们的div
中的id
要与main.js
中的el
属性相同,然后用浏览器打开这个index.html
,恭喜又出错了,我们打开浏览器的控制台,出现如下错误由于webpack打包时使用的是默认的运行期构造,但是
vue
运行期构造,是调用render()
函数,但是在App.vue
文件中没有render函数,所以会出现上面的错误,所以我们需要在webpack
中配置为独立构造,向webpack.dev.config.js
中新增然后重新打包,在浏览器中打开
index.html
,会发现App.vue
中的显示在浏览器中出现从零开始vue
参考文档
babel-upgrade命令的使用
vue独立构建与运行期构建
stage-x ES7的删除
webpack官网
babel官方文档
babel5升级到babel6.x总结
babel入门教程
babel polyfill与runtime的区别
创建public目录
在
vueApplication
根目录下创建一个public
目录,然后在public
目录下,创建一个css
目录,css
目录下主要放一些css
文件,在css
目录下创建style.css
文件style.css
虽然我们创建了
style.css
文件,但是打开index.html
发现并没有效果,因为我们还没有将style.css
文件并没有打包到bundle.js
文件中,增加如下片段webpack.dev.config.js
文件,以便能打包css
文件npm i css-loader --save-dev
npm i style-loader --save-dev
经过以上我们的
style.css
就可以通过import
来导入css
文件,修改App.vue
如下App.vue
然后重新打包
webpack --config ./build/webpack.dev.config.js
打包,然后用浏览器打开index.html
发现我们的style.css
样式生效了我们每次打包都是用
webpack --config ./build/webpack.dev.config.js
,这样会很麻烦的,所以增加如下题目到package.json
package.json
增加web服务器
webpack-dev-server
是一个静态的文件服务器,可以为打包后的文件提供web
服务npm i webpack-dev-server --save-dev
然后增加如下条目到
webpack.config-dev.js
中port:
是监听的端口号contentBase:
服务器工作的目录historyApiFallback:
用于将index.html
替代404
在
package.json
中添加如下条目在命令行中键入
npm run start
在浏览器中输入
http://localhost:8080/
,然后显示index.html
index.html
每次我们都需要引入
bundle.js
,但是当打包名字改变的时候我们还需要,重新进行引入,有没有一种方法实现打包文件自动注入index.html
文件中,有,npm i html-webpack-plugin --save-dev
,我们增加如下条目到webpack.dev.config.js
我们把
dist
目录下的index.html
复制到vueApplication
根目录下,删除dist
目录下的index.html
然后同时删除根目录下index.html
中的<script>
标签,然后键入npm run start
,然后在浏览器中输入http://localhost:8080/
发现成功显示style.css
文件打包后也被打包进bundle.js
,我们把css
文件单独打包出来,mini-css-extract-plugin
可以帮助我们,npm i mini-css-extract-plugin --save-dev
,修改webpack.config.dev.js
以前我也是使用
extract-text-plugin
这个插件但是在新版本好像不好用,所以使用上述的插件,功能也是一样的,然后在命令行键入npm run build
,发现dist文件夹下出现了main.一堆数字.css,成功的单独打包style.css
文件参考文档
webpack官网
MiniCssExtractPlugin的使用
创建components,router文件夹
我们在
src
文件夹下创建components
目录,首先创建content.vue
,fileContent.vue
,fileHeader.vue
,fonter.vue
,header.vue
,hello.vue
,world.vue
content.vue
fileConent.vue
fileHeader.vue
footer.vue
header.vue
hello.vue
world.vue
修改
App.vue
App.vue
然后我们在
src
文件夹下创建router
文件夹,在router
文件夹下创建index.js
用于创建路由index.js
在
public
目录下创建pictures
和musics
文件夹,然后在这俩个的目录下放入图片和音乐,具体看我的code
中的代码,修改style.css
的代码style.css
修改
main.js
然后修改
webpack.dev.config.js
,能够打包图片和音乐npm i url-loader --save-dev
npm i file-loader --save-dev
然后
npm run build
,发现dist
目录下多了importComponent.一堆数字.js
和bundle.一堆数字.js
,这个我们以后再讲,先这么放着,然后我们npm run start
,在浏览器中键入http://localhost:8080
然后发现会出现如下的界面,在下节主要讲解这个app
,这个界面我自己都不忍直视app的功能
这个
app
的功能比较简单,应该说非常简单,首先我这个app
分为三个部分头部,展示内容部分,尾部,都是应用css3
盒子模型来实现的,我们可以通过尾部来实现切换,一个是上传图片的,一个是上传音乐的,因为都是一些假数据,没有后台,所以大家就将就看吧按需加载
在
vue
中实现按需加载有vue
中的异步组件,ES6
的import(vue中的懒加载)
,webpack
中的require.ensure()
,这里采用的是ES6
的懒加载方式,可以把引入的组件写成这种方式const component = () => import(/* 自定义名字 */'components/header.vue')
,这样就实现了按需加载,已经在创建component文件夹
的章节中完成了webpack.config.dev.js
的配置,现在拿出来看一下webpack.config.dev.js
我们把打包的文件的
filename
改为bundle.[hash].js
,这样打包之后bundle
之后就会跟着一堆数字,我们更改打包的入口文件,我们会发现这个hash
会变化,chunkFilename
字段代表着非入口文件的名字,文件名字需要在运行期根据chunk发送的请求去生成,因为按需请求是用到的时候再去请求,其中使用const component = () => import(/* 自定义名字 */'components/header.vue')
其中的自定义名字
,便是生成打包文件的名字,如果多个按需请求使用相同的自定义名字
,那么按需加载的组件都被打包到同一个自定义组件文件
中,所以我们在创建components文件夹
章节打包时,dist
文件夹中出现了一个importComponent.一堆数字.js
的打包文件,是因为我们使用相同的自定义名字,所以多个组件被打包到同一个js
文件中。参考文档
按需加载的三种方式
vue懒加载
打包前清除dist文件
每次
npm run build
,都会将文件打包到dist
文件夹下,然后会导致dist
文件夹越来越大,有没有一种办法,每次打包前都清空dist
文件夹中的内容,幸好有CleanWebpackPlugin
插件帮助我们清空dist
文件夹,首先安装npm i clean-webpack-plugin --save-dev
,然后增加如下条目到webpack.dev.config.js
文件中webpack.dev.config.js
大家要注意,有时候会发现配置
CleanWebpackPlugin
插件,但是不起作用,可能是因为目录设置的问题。就像本项目的webpack.config.dev.js
文件放在build
文件夹中,如果直接写['dist']
那么会发现并没有清空dist
目录,是因为在build
目录下并没有dist
文件夹,所以我们需要给定根目录共用文件的抽离
现在来查看
bundle.js
,发现bundle.js
中混杂了一些公共的代码,比如说node_module
中的一些文件被打包进bundle.js
文件中,现在这些文件抽离出来,作为共用代码,以前版本都是使用CommonsChunkPlugin
这个插件,来实现共用文件抽离,但是webpack4.x
以上这个插件已经被去除了,现在使用optimization.splitChunks
插件来实现共用文件的抽离,增加如下代码到webpack.dev.config.js
中然后
npm run build
发现dist
文件夹多出一个vender.一堆数字.js
文件,然后可以发现bundle.js
文件缩减了很多,是因为一些共用代码已经被抽离出去参考文档
共用代码抽离
webpack官网
打包压缩
使用
UglifyjsWebpackPlugin
插件能够实现压缩,增加下面代码到webpack.dev.config.js
中这样就实现压缩,
npm run build
发现我们的文件变小了有错误请大家指出,希望能够对大家有帮助
The text was updated successfully, but these errors were encountered: