webpack + vue + vue-router学习笔记
安装webpack
1 | npm init |
建立代码目录
使用webpack
终端
1 | {extry file}出填写入口文件的路径,本文中就是上述main.js的路径, |
- 命令:
webpack app/main.js public/bundle.js
- 出错及更正:
ERROR in multi ./hello.js bundle.js Module not found: Error: Can't resolve 'bundle.js
,更正:webpack版本过高,原来的命令已经不适用了,更换打包命令:webpack app/main.js -o public/bundle.js
配置文件
根目录新建webpack.config.js
,代码如下:
1 | const path = require('path'); |
根目录运行webpack
打包程序
npm配置
npm配置文件package.json
中配置scripts
可以运行相应命令
1 | { |
运行npm run build
或者npm run-script build
即可让webpack打包代码
搭建本地服务器
安装依赖:npm i -D webpack-dev-server
webpack配置:
1 | // webpack本地服务器 |
运行webpack-dev-server
即可启动本地服务器
应用vue框架
其中src中的main.js为入口文件。
1 | // main.js |
app.vue为单页面组件。
1 | <template> |
安装loaders
webpack中安装并使用loader进行代码的打包
1 | npm一次性安装多个依赖模块,模块之间用空格隔开 |
webpack配置完善为:
1 | // webpack.config.js |
错误及解决
- 选项配置错误
1 | Options Validation Error |
rules[2]配置错误,不能为数组,只能为字符串
解决方案:将原代码
1 | { |
更改为:
1 | { |
或者更改为:
1 | { |
2.vue-loader插件显性引入
1 | Error1: Module Error (from ./node_modules/vue-loader/lib/index.js): |
webpack4.X更新之后,需要显性引入vue-loader插件
解决方案:const VueLoaderPlugin = require('vue-loader/lib/plugin');
详见vue-loader
3.vue-template-compiler需要作为单独的依赖
1 | Error2: Module build failed (from ./node_modules/vue-loader/lib/index.js): |
解决方案:npm i -D vue-template-compiler
应用vue-router
安装依赖:npm i -D vue-router
main.js
入口文件中,新建vue实例,参数中传入router
,components
,template
1 | import Vue from 'vue' |
app.vue
使用 router-link
组件来导航。通过传入 to
属性指定链接,<router-link>
默认会被渲染成一个 <a>
标签。<router-view/>
为路由出口,路由匹配到的组件将渲染在这里
1 | <template> |
router
router定义了跳转路由渲染的组件
1 | import Vue from 'vue'; |
问题解决
- vue使用template时更改vue使用模块
1 | vue.runtime.esm.js:588 [Vue warn]: |
运行时构建不包含模板编译器,因此不支持 template 选项,只能用 render 选项,但即使使用运行时构建,在单文件组件中也依然可以写模板,因为单文件组件的模板会在构建时预编译为 render 函数。运行时构建比独立构建要轻量30%,只有 17.14 Kb min+gzip大小。就是说,如果我们想使用template,我们不能直接在客户端使用npm install之后的vue。
此时,再去看查vue模块,在webpack配置文件添加:
1 | module.exports = { |
2.默认的代码目录使用@
替换,webpack配置文件添加:
1 | module.exports = { |
3.引入文件必须加后缀,否则报错,webpack配置文件添加:
1 | module.exports = { |
4.HTML
inject
有四个值: true
body
head
false
true
默认值,script标签位于html文件的 body
底部body
script标签位于html文件的 body
底部head
script标签位于html文件的 head
中false
不插入生成的js文件,这个几乎不会用到的
1 | const htmlWebpackPlugin = require('html-webpack-plugin'); |