💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
webpack+vue 前端工程 webpack vue vue-router adios vuex *.vue文件 web pack在生产环境中的打包的优化 发布前做一些优化 网络优化:减少HTTP请求、压缩静态资源的文件、使用浏览器的长缓存来降低流量的使用和提高网页的加载速度 目的: 重点和难点不是业务的开发, 难点是“工程化” 1. 学会搭建前端工程(因为现在的前端项目越来越复杂,不像以前简简单单几个html页面完事) 1.1 数据缓存 1.2 提高开发效率(es6、less、sass、less、stylus、jade) 1.3 代码规范化(eslint) 2. 网络优化 需要对http有深入的理解 3. API定制(前后端交互api规范的定制) 4. nodeJS功底 webpack grunt gulp等众多工具都是在nodeJS的环境中运行的(都需要nodeJS) 第一课:搭建项目 1. npm init 生成一个npm项目,项目中含有一个package.json文件,这个文件是npm的配置文件 2. npm install webpack vue vue-loader 安装之后会给出警告,需要第三步中的两个第三方依赖 3. npm i css-loader vue-template-compiler 4. 项目中创建一个src目录,src目录中创建一个app.vue文件 5. app.vue 文件中编写 <template><div>{{text}}</div></template> <script> <style> 6. 一个最简单的vue组件(每个Vue文件就被看做一个vue组件)写好了,但是显然这个app.vue是没有办法直接在浏览器中运行的(浏览器不认识*.vue文件),所以我们需要想办法让其可以运行,那么就需要下面的步骤 7. 新建一个webpack.config.js webpack是帮助我们打包前端资源的(前端资源有很多,例如:javascript、css、图片、字体 ),这些前端资源都是需要我们通过http请求加载的内容,而这些内容我们都是可以全部融入到js文件中,然后去加载js文件的方式来实现的,所以我们以js文件作为程序的入口 const path = require(‘path’) module.exports = { entry: path() } 8. 上面的entry需要填写入口的js文件,但是现在还没有,所以我们就创建一个,在src目录下创建一个index.js文件作为我们的入口文件 index.js是入口文件,也就是说现在我们想让浏览器打开我们的vue文件,就得把app.vue挂载到index.js文件中去,这样index.js->app.vue 挂载的办法如下: import Vue from ‘vue’ import App from ‘./app.vue’ const root = document.createElement(‘div’) document.body.appendChild(root) new Vue({ render: (h) => h(App) }).$mount(root) 9.入口文件已经写好,此时第7步中的path属性就可以写了,当然还需要一个入口,通过output指定 __dirname是node的一个全局变量,代表的是当前js文件所在的目录,本项目中代表的就是项目根目录; path.join()方法接收两个参数,作用是将两个参数拼接成一个目录,如下__dirname和src/index.js就是index.js文件的绝对路径 module.exports = { entry: path.join(__dirname, ‘src/index.js’), output: { filename: ‘bundle.js’, path: path.join(__dirname, ‘dist’) } } 经过上面的配置,web pack就是把index.js文件作为入口文件进行打包,最终生成dist目录下面的bundle.js文件 10. 此时就可以执行webpack命令来进行打包了,但是在命令行中直接输入webpack的话会调用npm全局的webpack命令来进行打包,这样存在的问题是:全局的webpack可能因为版本、配置等众多问题导致打包失败,所以我们需要在项目中指定webpack版本和配置文件,来精确的使用webpack进行打包,配置方法是:打开package.json文件-在scripts对象中配置build指令 "scripts": { "build": "webpack --config webpack.config.js" }, scripts配置项代表的是npm可以执行的脚本命令,大白话就是:npm run xxx, 这个xxx就是scripts配置项的“键”,而run xxx之后背后真正需要执行什么东西,这个东西就是键对应的值。拿上面的配置举例: build :代表的是将来可以在命令行中输入 npm run build webpack --config webpack.config.js:代表的就是run build之后真正执行的命令是webpack打包命令 webpack打包命令非常简单,直接在命令行中输入webpack即可,而其后的--config代表的是:指定打包时参考的配置文件 好了,打包开始,命令行输入npm run build,不幸的是报错了 ------ 报错内容如下: ERROR in ./App.vue Module parse failed: Unexpected token (1:0) You may need an appropriate loader to handle this file type. | <template> | <div class="app"> | 这是第一个vue组件{{text}} @ ./index.js 2:0-27 npm ERR! Darwin 15.6.0 npm ERR! argv "/usr/local/bin/node" "/usr/local/lib/node_modules/cnpm/node_modules/.bin/npm" "--userconfig=/Users/zhoupan/.cnpmrc" "--disturl=https://npm.taobao.org/mirrors/node" "--registry=https://registry.npm.taobao.org" "run" "build" npm ERR! node v7.4.0 npm ERR! npm v3.10.10 npm ERR! code ELIFECYCLE npm ERR! webpack-study-build-project@1.0.0 build: `webpack --config webpack.config.js` npm ERR! Exit status 2 npm ERR! npm ERR! Failed at the webpack-study-build-project@1.0.0 build script 'webpack --config webpack.config.js'. ------ “You may need an appropriate loader to handle this file type.”这句话的意思就是告诉我们需要给.vue这种文件申明一个loader,使webpack可以认识这种文件并去处理它,因为原生的webpack是只支持.js文件类型的,并且只支持es5的语法,所以我们在使用超出它理解范围的某种语法的时候,我们要使用一些可以帮助它理解并处理的工具去处理这些文件,具体的做法如下: 打开webpack.config.js文件,增加module配置项 const path = require('path') module.exports = { entry: path.join(__dirname, 'index.js'), output: { filename: 'bundle.js', path: path.join(__dirname, 'dist') }, module: { rules: [ { test: /.vue$/, loader: 'vue-loader' } ] } } module配置项有一个rules属性,该属性是一个数组,可以配置好多种规则,每项规则有test和loader两个重要属性,其中 test是一个正则表达式,申明处理哪种文件,例如上面的/.vue$/表示的是以.vue结尾的文件; loader用来指定匹配到test申明的文件需要使用哪种loader进行处理,例如上面的’vue-loader’; 整体的含义就是使用vue-loader来处理.vue文件 至此,再次执行npm run build命令,完美的打包出一个bundle.js文件