手把手教你vue-cli单页到多页应用的方法

关于“手把手教你vue-cli单页到多页应用的方法”的完整攻略,我可以给你详细讲解一下。

1. 什么是vue-cli

Vue.js是一套构建用户界面的渐进式框架,是目前较为流行的前端框架之一。而vue-cli则是Vue.js的脚手架工具,帮助我们快速生成Vue.js项目基础架构,集成常见的开发配置和工具,大大提升了我们的开发效率。

2. 单页应用和多页应用的区别

单页应用(SPA)是指只有一个HTML页面的Web应用,页面的一些部分会在使用的时候动态更新或者重新加载,从而提供更好的用户体验。

多页应用(MPA)则是指有多个HTML页面的Web应用,每个页面有自己的URL地址,用户请求不同的页面时会重新刷新页面。

3. 将单页应用转化为多页应用

3.1 新建多页面的Webpack配置文件

在Vue CLI项目的根目录创建一个multi-page.config.js文件,用于多页应用的Webpack配置。在这个文件中我们需要做以下配置:

const path = require('path');
const webpack = require('webpack');

// 定义多页应用的页面入口文件
const entries = {
  page1: './src/page1/main.js',
  page2: './src/page2/main.js'
};

// 定义多页应用的HTML文件
const HtmlWebpackPlugin = require('html-webpack-plugin');
const htmlWebpackPluginArr = [];
Object.keys(entries).forEach(function (key) {
  htmlWebpackPluginArr.push(
    new HtmlWebpackPlugin({
      filename: key + '.html',
      chunks: [key],
      template: 'public/index.html',
      inject: true
    })
  );
});

module.exports = {
  entry: entries,

  output: {
    path: path.resolve(__dirname, './dist'),
    filename: '[name]/[name].js',
    publicPath: '/'
  },

  plugins: htmlWebpackPluginArr,

  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          loaders: {
            css: [
              'vue-style-loader',
              'css-loader',
              'postcss-loader'
            ],
            sass: [
              'vue-style-loader',
              'css-loader',
              'sass-loader?indentedSyntax'
            ],
            scss: [
              'vue-style-loader',
              'css-loader',
              'postcss-loader',
              'sass-loader'
            ]
          }
        }
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'file-loader',
        options: {
          name: '[name].[ext]?[hash]'
        }
      },
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/,
        loader: 'file-loader',
        options: {
          name: '[name].[ext]?[hash]'
        }
      }
    ]
  },

  resolve: {
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': path.resolve(__dirname, './src')
    },
    extensions: ['*', '.js', '.vue', '.json']
  },

  devServer: {
    historyApiFallback: true,
    noInfo: true,
    overlay: true,
    contentBase: './dist',
    open: true,
    hot: true
  },

  performance: {
    hints: false
  },

  devtool: '#eval-source-map'
};

其中,entries定义了多个页面的入口文件,HtmlWebpackPlugin则定义了多个页面的HTML文件。

3.2 修改package.json文件的scripts

我们只需要在原有的scripts命令中加入多页面配置文件的信息即可,如下所示:

"scripts": {
  "dev": "webpack-dev-server --inline --config build/webpack.dev.conf.js && webpack --watch --config multi-page.config.js --progress",
  "build": "node build/build.js",
  "lint": "eslint --ext .js,.vue src",
  "test": "npm run lint",
  "multi": "webpack --config multi-page.config.js"
},

3.3 修改文件路径

我们需要在public/index.html中手动添加指向其他html文件的链接,而我们在此之前需要将所有文件路径都修改一下(如果原路径为<img src="/static/bg.jpg">,我们需要修改为<img src="./static/bg.jpg">),这样路径才不会出错。

最后,我们在public/index.html页面中加入以下代码,用于链接到多页应用的其他页面:

<a href="./page1.html">page1</a>
<a href="./page2.html">page2</a>

3.4 运行

使用npm run multi命令运行Webpack,生成多页应用的构建文件。之后我们就可以愉快地在浏览器中访问多页应用页面了。

4. 示例

下面,我们通过两个简单的示例来说明如何将单页应用转化为多页应用。

4.1 示例一

新建一个Vue CLI项目,选择默认的单页应用模板。在根目录下新建multi-page.config.js文件,并复制上述代码。之后,在./src目录下新建两个目录page1page2。将./src/main.js复制为./src/page1/main.js./src/page2/main.js。在./public目录下新建page1.htmlpage2.html,分别作为两个页面的入口文件。最后,使用npm run multi运行构建,即可得到一个多页应用。

4.2 示例二

还是以单页应用模板为基础,我们先创建两个组件,分别为Page1Page2。在./src目录下新建两个目录page1page2,并在其中创建新的Vue.js组件文件main.js,使用以下内容:

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

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

page1page2两个目录下,都创建index.html文件,内容分别为:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>page1</title>
</head>
<body>
  <div id="app"></div>
  <script src="./main.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>page2</title>
</head>
<body>
  <div id="app"></div>
  <script src="./main.js"></script>
</body>
</html>

最后,修改public/index.html文件,如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>single-page-app</title>
</head>
<body>
  <nav>
    <a href="./page1/index.html">page1</a>
    <a href="./page2/index.html">page2</a>
  </nav>
</body>
</html>

使用npm run multi进行构建,最终我们能得到一个基于Vue.js的多页应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手把手教你vue-cli单页到多页应用的方法 - Python技术站

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

相关文章

  • springboot跨域问题解决方案

    下面是关于springboot跨域问题的解决方案完整攻略。 背景 在前后端分离的开发模式中,前端项目和后端项目通常会分别部署到不同的域名下,因此会出现跨域请求的问题。这时候就需要解决跨域问题。 解决方案 1. 添加跨域支持的Filter Spring Boot提供了一种通过Filter来实现跨域请求的解决方案,步骤如下: 创建一个继承自OncePerRequ…

    Vue 2023年5月28日
    00
  • Vue2.X 通过AJAX动态更新数据

    当使用 Vue2.X 开发Web应用时,会经常需要通过AJAX动态获取数据并更新页面。以下是一个完整攻略,演示如何在 Vue2.X 中通过AJAX动态更新数据。 1. 安装 axios 在 Vue2.X 中,可以使用 axios 库来进行 AJAX 请求。在使用之前需要先进行安装。可以通过以下命令来进行安装: $ npm install axios –sa…

    Vue 2023年5月29日
    00
  • Vue reactive函数实现流程详解

    Vue Reactive函数实现流程详解 Vue.js 框架的核心就是数据驱动,同时也是以数据为中心来响应视图变化。然而,Vue.js 还支持响应式,因此当数据发生变化时,Vue.js 自动更新视图。 在 Vue.js 中,通过 getter 和 setter 函数来实现数据的响应式。 实现流程 Vue.js 的实现响应式的方式,是通过劫持数据对象的属性来达…

    Vue 2023年5月28日
    00
  • vue中v-text / v-html使用实例代码详解

    当我们使用Vue.js开发Web应用程序时,我们常常需要在模板中显示动态生成的内容。Vue.js为我们提供了两个指令 v-text 和 v-html,可以方便地将动态生成的内容渲染到HTML浏览器中,并避免XSS攻击。下面详细介绍这两个指令的使用方法。 v-text指令 v-text指令用于将数据绑定到元素的文本内容中。它会将Vue实例中对应的数据对象的值动…

    Vue 2023年5月27日
    00
  • 使用Vue.js创建一个时间跟踪的单页应用

    当我们创建一个时间跟踪的单页应用时,Vue.js是一个非常好的选择。下面是详细的步骤: 第一步:创建一个Vue实例 我们需要先在HTML中引入Vue.js,然后创建一个Vue实例。我们可以这样做: <!DOCTYPE html> <html lang="en"> <head> <meta char…

    Vue 2023年5月27日
    00
  • vue如何动态实时的显示时间浅析

    那我来分享一下Vue.js实时显示时间的攻略。 1. 使用Vue.js的生命周期函数 Vue.js生命周期函数是指Vue实例在不同阶段会自动执行的一系列函数。我们可以通过生命周期函数来实现实时显示时间的功能。 具体步骤如下: 1.1 创建一个Vue实例 使用Vue.js创建一个Vue实例,在data属性中新增一个变量time,用于存储当前时间,代码如下: v…

    Vue 2023年5月28日
    00
  • element日历calendar组件上月、今天、下月、日历块点击事件及模板源码

    下面是详细讲解 “element 日历 calendar 组件上月、今天、下月、日历块点击事件及模板源码”的完整攻略。 1. 功能说明 element 日历 calendar 组件是一款强大的日期选择组件,常用于项目中的日期选择、预约等场景。在本篇攻略中,将详细讲解其上月、今天、下月、日历块点击事件及模板源码等内容。 上月、下月按钮点击事件:点击上月、下月后…

    Vue 2023年5月29日
    00
  • java中对Redis的缓存进行操作的示例代码

    现在我将为您详细讲解如何在Java代码中对Redis缓存进行操作的完整攻略。 首先,我们需要确保已经在Java项目中引入了Redis的依赖包,例如Jedis或Lettuce等。 连接Redis服务 import redis.clients.jedis.Jedis; public class RedisDemo { public void connectRed…

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