手把手教你基于vue-cli搭建多页面应用项目

1. 全局安装vue-cli

npm install -g vue-cli

2.基于webpack项目模板创建项目

在这里插入图片描述

进入你的工作目录 在命令行输入
vue init webpack yourProjectName

在这里插入图片描述

2.1 项目模板初始化选项

在这里插入图片描述

按照个人喜好进行配置的选择就好,嫌麻烦可以一路回车,除了vue-router 其他全部No也行(最好不使用eslint 因为要配置一些东西 还可能存在报错bug)

3. vue-cli单页面运行效果

在这里插入图片描述

根据黄字提示进入指定目录 然后运行即可

运行效果图:
在这里插入图片描述

4. 基于Vue-cli的多页面应用配置

在这里插入图片描述

5.这个是创建完项目后的初始目录结构,接下来我们要进行目录结构的改造
5.1 在src目录下创建一个pages目录,按照个人习惯可以在pages目录下面再创建各种类别的文件夹(如index.html放在index文件夹下面),将根目录下的index.html放在pages下面的index文件夹下面,删除src目录下的App.vue文件(删除App.vue是可选项)。 如果不想移动也可以直接删除掉根目录下的index.html文件。

在这里插入图片描述

5.2 在index.html所在目录下面创建index.js和index.vue

在这里插入图片描述

5.3 在index.vue中写自己想要写的页面

在这里插入图片描述

5.4 在index.js里面添加如下内容

在这里插入图片描述

import Vue from 'vue'
import index from './index.vue'

// eslint-disable-next-line no-new
new Vue({
  el: '#index',
  render: h => h(index)
})
5.5 修改index.html中的内容

在这里插入图片描述

5.6 至此页面的准备部分已经结束,因为要展示多页面的功能 因此我重复上述步骤,又创建了一个页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 多页面配置的修改

主要修改如下这四个配置
在这里插入图片描述

6.1 在utils.js里面添加如下内容
// glob是webpack安装时依赖的一个第三方模块,还模块允许你使用 *等符号, 例如lib/*.js就是获取lib文件夹下的所有js后缀名的文件
var glob = require('glob')
// 页面模板
var HtmlWebpackPlugin = require('html-webpack-plugin')
// 取得相应的页面路径,因为之前的配置,所以是src文件夹下的pages文件夹
var PAGE_PATH = path.resolve(__dirname, '../src/pages')
// 用于做相应的merge处理
var merge = require('webpack-merge')


//多入口配置
// 通过glob模块读取pages文件夹下的所有对应文件夹下的js后缀文件,如果该文件存在
// 那么就作为入口处理
exports.entries = function() {
    var entryFiles = glob.sync(PAGE_PATH + '/*/*.js')
    var map = {}
    entryFiles.forEach((filePath) => {
        var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
        map[filename] = filePath
    })
    return map
}

//多页面输出配置
// 与上面的多页面入口配置相同,读取pages文件夹下的对应的html后缀文件,然后放入数组中
exports.htmlPlugin = function() {
    let entryHtml = glob.sync(PAGE_PATH + '/*/*.html')
    let arr = []
    entryHtml.forEach((filePath) => {
        let filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
        let conf = {
            // 模板来源
            template: filePath,
            // 文件名称
            filename: filename + '.html',
            // 页面模板需要加对应的js脚本,如果不加这行则每个页面都会引入所有的js脚本
            chunks: ['manifest', 'vendor', filename],
            inject: true
        }
        if (process.env.NODE_ENV === 'production') {
            conf = merge(conf, {
                minify: {
                    removeComments: true,
                    collapseWhitespace: true,
                    removeAttributeQuotes: true
                },
                chunksSortMode: 'dependency'
            })
        }
        arr.push(new HtmlWebpackPlugin(conf))
    })
    return arr
}
6.2 修改webpack.base.conf.js里面的内容

在这里插入图片描述

6.3 修改webpack.dev.conf.js里面的内容

在这里插入图片描述

6.4 修改webpack.prod.conf.js里面的内容

在这里插入图片描述
在这里插入图片描述

6.5 到此基于vue-cli的搭建过程就结束了 下面是运行测试图

npm run dev

默认访问index.html
在这里插入图片描述
访问test.html
在这里插入图片描述

7. build打包过程中可能会存在各种静态资源的丢失或者运行后明明有文件却显示404问题。大多都是路径的问题

用以下的一个项目记录我解决静态资源丢失的方法。(我的静态资源放在了static目录下面而不是assets目录下)
在这里插入图片描述

7.1修改 config/index.js文件

在这里插入图片描述

7.2 修改build/utils.js文件

在这里插入图片描述
此时修改完后 若想要使打包完后的项目图片等运行时正常,把所有显示页面中的src后面的链接都改成 . ./. ./. ./static/xxx/xxx/xxx
例如此处的显示页面index.vue
在这里插入图片描述
以及其他页面 如video.html等
在这里插入图片描述

8. 对于自己的页面想要添加js和css文件怎么办?(以静态资源文件放在static为例)

在这里插入图片描述

可以在index.html或其他指定页面中直接添加js和css
切记!路径一定要这样写!否则会出现打包后静态资源丢失或者找不到的问题
./static/xxx/xxx/xxx

8.1 对于自己写的js文件中引入的静态资源路径怎么写?

以该项目自己写的video.js为例,该js引入了要播放视频的资源地址
在这里插入图片描述
emmmmmm…报错可以直接忽视掉= = 也就是eslint不好的地方了
路径的写法也是./static/xxx/xxx
这样可以保证打包后的项目不会找不到或丢失资源

9. 运行结果
9.1 本地测试

可以看到 js、css等都是没有问题的
在这里插入图片描述

9.2. 服务器测试build后的打包文件

可以看到 js、css等也是没有任何问题的
在这里插入图片描述

10.总结

如果觉得vue-cli搭建多页面应用比较麻烦 可以考虑下nuxt 还是比较方便的。以上方法亲测有效 但是毕竟我们是敲bug的 所以可能出现各种其他问题 欢迎讨论!感谢观看!

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值