一、vue-cli3单页面构建方案
1、在目标文件夹内执行
vue ui ; 一个ui版界面,用于创建vue项目;
2、打开router文件夹内的index,看情况配置router的模式,是默认的hash还是history?ps:个人推介history模式,因为内嵌如app的H5页面的话,有可能某些app是不允许页面上带有'#'的,而hash会在url上利用#来做路由转发。ps:history模式在发布到服务器上需要nginx配置一下。详情请自行百度。
const router = new VueRouter({ base: '/', mode: 'history', //还可设置为'hash'模式 routes })
3、在根目录新建vue.config.js,覆盖webpack配置,将如下内容copy到文件中,作为初始配置
// const webpack = require('webpack') module.exports = { lintOnSave: false, // 禁止eslint devServer: { open: true, // 构建完成自动打开浏览器 }, configureWebpack: { plugins: [ // 全局配置node_modules中的模块,使用时无需引入 new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery", "windows.jQuery": "jquery" }) ] }, // webpack 链接 API,用于生成和修改 webapck 配置 chainWebpack: (config) => { // 取消 chunks,每个页面只对应一个单独的 JS / CSS config.optimization.splitChunks({ cacheGroups: {} }); // config // .plugin('webpack-bundle-analyzer') // .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin) }, pluginOptions: { } }
4、配置完这些后,npm run serve启动项目,会加载如下两个js
npm run serve
app.js:是所有单页面首次渲染都必须加载的js,内部合并了框架及js(如vue、vue-x、vue-router及非异步组件但引用了的node_modules中的模块),及所有页面公用的模块。about.js:是每个页面独立的js,这个跟router中引用模块的方式有关。
具体详解如下:
1、
import Home from '../views/Home.vue'
这种引用方式引用页面模版组件,就不会出现about.js文件,因为属于同步模块,当前件建的js会被打包进app.js。但是此种随着页面的增多,公用的app.js会越来越大。看情况在app.js大小接受的前提下权衡使用;2、
const routes = [ { path: '/', name: 'Home', // component: Home component: () => import(/* webpackChunkName: "home" */ '../views/Home.vue') // webpack的魔法注释,将拆分出的js命名为home }, { path: '/about', name: 'About', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import(/* webpackChunkName: "about" */ '../views/About.vue') } ]
这种引用方式就是异步引用模版组件,不会将当前组建的js打包进app.js,就不会出现1种的问题。因为只要没有加载到对应页面,就不会加载对应页面的js。对应页面的js会最为独立的js单独的动态引入,如同上图的about.js,在进入about页面时才会引入。
3、如果在main.js中引入的node_modules包,则会直接打包进app.js,这个逃不掉。
ps:最终结论,建议每个页面都异步引用页面模版。
5、每个页面如果引了node_mudules就会存在相对应的vendors-home.js,如果没引入node_mudules的话,每个页面按需组件就不会存在vendors-home.js这个文件,如下图:
6、区分本地、测试、线上环境
ps:官网提供一种方案,但是需要建立多个环境配置的配置文件,嫌麻烦,就不使用官方的方式,使用如下插件拆分环境:
cross-env:https://github.com/kentcdodds/cross-env
cnpm i cress-env --save-dev // 更改node环境变量插件
之后在package.json中加入如下三行配置,即可区分本地、测试、线上环境
"scripts": { "serve": "cross-env NODE_ENV=development vue-cli-service serve", "test": "cross-env NODE_ENV=test vue-cli-service build", "build": "cross-env NODE_ENV=production vue-cli-service build" },
在vue.config.js中执行如下代码即可打印出当前环境。
console.log(process.env.NODE_ENV)
在src目录下新建config目录,进入目录,新建gateway.config.js文件用于配置不同环境接口host,代码如下:gateway.config.js文件内容如下:
// 开发环境地址(npm run serve) const devHost = { // 接口地址域名相关 baseApi: 'https://abc.com', } // 测试环境地址(npm run test) const testHost = { // 接口地址域名相关 baseApi: 'https://abc.com', } // 线上环境地址(npm run build) const proHost = { // 接口地址域名相关 baseApi: 'https://abc1.com', } // 区分环境选择静态资源地址 const env = process.env.NODE_ENV let exportConfig = '' if (env === 'production') { exportConfig = proHost } else if (env === 'test') { exportConfig = testHost } else { exportConfig = devHost } export default exportConfig
结束:之后只需要在接口api的js文件中引入此文件即可。发布时区分环境打包。
7、浅谈项目引入第三方插件方案
ps:原则:移动端单个js大小不超过200k;pc端单个js不超过400k;
1.vue模块化引入node_modules包插件:
前提,各个页面都是异步加载,这样的好处是单个页面的js不会被打包进公共app.js中。之后在单个js中引入第三方库。但是据测试:这种模块化引入第三方插件,比cdn模式引入的js体积至少要大2呗,因为webpack内部对每个第三方库进行了二次处理,会增大js体积。权衡js大小使用。
2.cdn模式引入第三方插件:
提供这种方式,是因为有些库是不支持vue的,只支持cdn模式引入,而且比较轻量级,可以选择这种方案,异步cdn模式引入第三方插件,这些方式最下方脚手架示例中都有demo;
8、项目中常用的打包插件及第三方库
1.vue https://cn.vuejs.org
2.vue-router https://router.vuejs.org
3.vue-x https://vuex.vuejs.org
4.sass https://www.sass.hk
5.axios http://www.axios-js.com/
6.normalize.css http://necolas.github.io/normalize.css/
7.n-zepto https://npm.taobao.org/package/n-zepto
8.webpack-bundle-analyzer https://github.com/webpack-contrib/webpack-bundle-analyzer
下方是vue-cli3内置插件(直接在vue.config.js中配置):
如下插件可参考vue-cli3官网配置方法:
https://cli.vuejs.org/zh/config/#css-sourcemap
9.autoprefixer:自动添加浏览器前缀。(如:-webkit-等)
10.url-loader:改变静态资源引用路径
11.ProvidePlugin:全局配置node_modules中的模块
具体配置方法如下(比较全的vue.config.js配置):
const webpack = require('webpack') const processEnv = process.env.VUE_APP_ENV; // 区分环境(值:production、development、test) const isPro = processEnv === 'production'; // 判断production环境 const outputDir = 'dist'; // 输出文件目录(默认dist) const assetsDir = ''; // 配置放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录 // 区分环境选择cdn地址 let publicPath = '' // 静态资源引用路径 let fontPublicPath = '' // 字体图标引用的cdn路径 let imgPublicPath = '' // css引用图片的cdn路径(c2c/static/img) if (processEnv === 'production') { publicPath = 'https://abc.com/c2c/shop' // 正式环境静态资源css、js等cdn路径 fontPublicPath = `https://abc.com/c2c/shop/${assetsDir "n-zepto", Zepto: "n-zepto", "window.Zepto": "n-zepto" }]); config.module .rule('images') .use('url-loader') .loader('url-loader') .tap(options => Object.assign(options, { limit: 10240, // 小于10k,压缩图片 => base64 // limit: 3000, publicPath: imgPublicPath, name: `[name].[hash:8].[ext]` })) // 设置fonts字体文件引用的路径 config.module .rule('fonts') .test(/\.(woff2"@/assets/css/global.scss"; @import "@/assets/css/func.scss"; ` }, postcss: { plugins: [ // 浏览器自动加前缀 require('autoprefixer')({ overrideBrowserslist: [ "Android 4.0", "iOS 7", "Chrome > 31", "ff > 31", "ie >= 8" ] }), ] } }, // 启用 CSS modules for all css / pre-processor files. requireModuleExtension: false }, // 构建时开启多进程处理 babel 编译 parallel: require('os').cpus().length > 1, pwa: { iconPaths: { favicon32: 'favicon.ico', favicon16: 'favicon.ico', appleTouchIcon: 'favicon.ico', maskIcon: 'favicon.ico', msTileImage: 'favicon.ico' }, }, // 第三方插件配置 pluginOptions: { // ... } }
9、一个基础配置较为完善的基于vue-cli3的单页面项目方案脚手架:
项目脚手架集合project-init
其中的cli-start-spa文件夹,内部readme有项目细节。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】