详解vue-cli多页面工程实践

详解vue-cli多页面工程实践

简介

在实际项目中,往往需要构建多页应用来满足不同的功能需求。本文将详细介绍如何使用vue-cli构建多页应用。

准备工作

  • 安装node.js
  • 安装vue-cli

创建工程

打开终端,执行以下命令来创建vue-cli的多页应用工程:

vue init webpack my-project

这里将工程命名为my-project,你可以自定义名称。在这个过程中,有几个需要注意的地方:

  • 是否安装 vue-router:不需要安装,因为多页应用不需要使用vue-router。
  • 是否使用 ESLint:可以选择使用,根据项目需要决定。
  • 是否使用 Karma + Mocha:不需要使用,因为多页应用不需要单元测试。

目录结构

创建工程后,工程结构如下:

my-project
├── build
├── config
├── node_modules
├── src
│   ├── assets
│   ├── components
│   ├── views
│   ├── App.vue
│   └── main.js
├── static
├── .babelrc
├── .editorconfig
├── .gitignore
├── index.html
└── package.json

重要的目录是src目录,它包含了所有的源代码和页面模板。views目录用于存放多个页面,每个页面一个文件夹,文件夹里面至少有一个html和一个js文件。

配置多页应用

多页应用的配置依赖于webpack。打开/config/index.js文件,修改module.exports对象,添加如下代码:

const glob = require('glob')
const path = require('path')

function getEntry(globPath) {
  let entries = {}
  glob.sync(globPath).forEach(function(entry) {
    let basename = path.basename(entry, path.extname(entry))
    entries[basename] = entry
  })
  return entries
}

module.exports = {
  // ...
  // 修改这里
  pages: getEntry('./src/views/**/*.js'),
}

这个代码做了什么呢?首先,它使用glob库来匹配src/views目录下的所有js文件,然后将js文件名作为页面名,作为pages的键,将js文件作为pages的值。这样,我们就完成了多个页面的配置。

创建页面模板

多页应用需要为每个页面提供独立的HTML模板,可以在这个模板中引入不同的JS文件。建议将模板以.html或者.ejs文件来保证代码的可维护性。

在/src/views目录中,创建一个名为example的目录,在其中添加一个名为index.html的文件,代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Example</title>
  </head>
  <body>
    <div id="app"></div>
    <script src="./index.js"></script>
  </body>
</html>

这里只需要一个div用于vue的挂载,和一个script标签用于引入入口JS文件。

创建页面脚本

在/src/views/example目录中,创建一个名为index.js的文件,代码如下:

import Vue from 'vue'
import App from './App.vue'

new Vue({
  el: '#app',
  render: h => h(App),
})

这里的代码和单页应用是一样的,只不过挂载的位置从#app变成了example.html中的#app。

运行代码

上面的代码已经创建完毕,可以执行下面的命令来运行项目

npm run dev

这个命令会启动一个开发服务器,打开 http://localhost:8080/example.html 即可看到页面效果。

完整示例代码可在GitHub中下载获取。

示例说明1: 添加第二个页面

为了演示如何添加一个新的页面,我们接下来再添加一个名为about的页面。

首先在/src/views目录下,创建一个名为about的目录,在其中添加一个名为index.html的文件。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>About</title>
  </head>
  <body>
    <div id="app"></div>
    <script src="./index.js"></script>
  </body>
</html>

然后在about目录下,再创建一个名为index.js的文件。

import Vue from 'vue'
import App from './App.vue'

new Vue({
  el: '#app',
  render: h => h(App, {
    props: {
      msg: 'About Page',
    },
  }),
})

这里的代码也是非常简单,和示例一一样的,只不过添加了一个props来传递组件的信息。

继续执行npm run dev,然后在浏览器中打开http://localhost:8080/about.html,即可看到about页面的效果。这个时候,Vue组件会展示About Page的信息。

示例说明2: 使用CSS模块

在多页应用中,往往需要通过CSS将各个页面的样式区分开来。使用CSS模块可以很好地解决这个问题。

首先,保证我们的项目支持CSS模块,打开/config/index.js文件,找到module.exports对象,添加如下代码:

module: {
  rules: [
    // 添加这一行
    { test: /\.s(c|a)ss$/, use: ['vue-style-loader', 'css-loader', 'sass-loader'] },
  ]
},

这里添加了一个Sass Loader,用于处理.scss文件。

然后,在/src/views/example目录中,创建一个名为index.scss的文件,代码如下:

.hello {
  font-size: 40px;
}

这里的样式非常简单,只是将字体设置为了40px来区分其他页面。

接着,修改/src/components/HelloWorld.vue文件,如下:

<template>
  <div class="hello">
    {{ msg }}
  </div>
</template>

<!-- 添加这一行 -->
<style lang="scss">
@import "@/views/example/index.scss";
</style>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  }
}
</script>

在这里,我们将刚才写的index.scss样式引入了进来。

最后,重新运行npm run dev,打开http://localhost:8080/example.html查看页面效果,应该可以看到页面中的Hello World字体已经变成了40px。

总结

通过以上的步骤,我们成功地配置了vue-cli多页应用的环境,并创建了多个页面,在页面之间应用不同的样式和脚本,来满足各种需求。

相关的代码可以在GitHub中下载、查看。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解vue-cli多页面工程实践 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue interceptor 使用教程实例详解

    介绍 vue-interceptor 是 Vue.js 的 HTTP 拦截器插件,它可以在请求发送和响应返回时自定义拦截处理,从而允许我们进行统一的请求前、后处理。本文将详细讲解并演示 Vue interceptor 的使用教程。 安装 我们可以通过 NPM 或 Yarn 来下载安装 Vue interceptor: npm install vue-inte…

    Vue 2023年5月28日
    00
  • vue项目使用定时器每隔几秒运行一次某方法代码实例

    针对这个问题,我来为您进行详细讲解。 首先,我们需要了解Vue在处理定时器时的基础知识。在Vue中使用定时器的方法有两种,一种是使用Vue提供的计时器(它基于window.setInterval),另一种是直接使用window.setInterval。这两种方法都可以达到定时器的效果,但是在Vue项目中使用Vue提供的计时器更为合适,因为它能够与Vue实例进…

    Vue 2023年5月29日
    00
  • Vue项目中实现带参跳转功能

    下面是Vue项目中实现带参跳转功能的完整攻略: 1. 传递参数 1.1 路由方式 我们可以利用 Vue Router 实现带参跳转,先看一下路由文件定义如下: import Vue from ‘vue’ import Router from ‘vue-router’ import Home from ‘@/views/home/Home’ import De…

    Vue 2023年5月27日
    00
  • 基于 vue-skeleton-webpack-plugin 的骨架屏实战

    让我来详细讲解“基于 vue-skeleton-webpack-plugin 的骨架屏实战”的完整攻略。 简介 随着客户端应用的普及以及前端性能要求的不断提高,页面骨架屏方案得到了广泛的应用。Vue.js 作为目前最受欢迎的前端框架之一,也有很多骨架屏方案可供选择。在这里,我们以 vue-skeleton-webpack-plugin 为例,介绍使用骨架屏实…

    Vue 2023年5月28日
    00
  • Vue.directive 自定义指令的问题小结

    下面是关于Vue自定义指令的问题小结的详细攻略: 什么是Vue自定义指令? 在Vue中,指令是一种带有 v- 前缀的特殊属性。指令提供了一些带有响应式行为的语法糖。Vue中已经提供了很多内置指令,如v-if、v-for、v-show等。 Vue允许我们自定义指令,方便我们在实现一些特殊功能时使用。我们可以使用Vue.directive方法来自定义指令,该方法…

    Vue 2023年5月28日
    00
  • 基于pako.js实现gzip的压缩和解压功能示例

    关于“基于pako.js实现gzip的压缩和解压功能示例”的完整攻略,我可以给您提供以下步骤: 确认环境 在开始使用pako.js之前,需要确保环境中已经包含有pako.js的文件,可以通过以下方式进行安装: npm install pako 引入pako.js 在代码中引入pako.js: <!DOCTYPE html> <html&gt…

    Vue 2023年5月28日
    00
  • vue.js实现只能输入数字的输入框

    实现只能输入数字的输入框可以通过如下步骤来完成: 步骤一:定义只允许输入数字的指令 在Vue.js中,我们可以通过定义指令来限制输入框的输入内容。下面是一个自定义的v-only-number指令,它可以确保输入框只接受数字: <template> <div> <input v-only-number type="tex…

    Vue 2023年5月27日
    00
  • vue实现文件上传和下载

    下面就是 Vue 实现文件上传和下载的完整攻略。 文件上传 实现方式 文件上传可以采用传统的表单上传方式,也可以使用 Ajax 实现无刷新上传。这里我们以使用表单的方式为例进行讲解。 Vue.js 并没有提供直接上传文件的方法,需要借助第三方插件来实现。目前比较常用的插件有 vue-file-upload、vue-simple-upload、vue-uplo…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部