ホームページ ウェブフロントエンド jsチュートリアル Vue-cli を複数ページをサポートする履歴モードに変換する方法

Vue-cli を複数ページをサポートする履歴モードに変換する方法

Jan 16, 2018 am 11:10 AM
vue-cli サポート

この記事では主に Vue-cli を複数ページをサポートする履歴モードに変換する方法を詳しく紹介します。興味のある方はぜひ参考にしてください。

タイトルは正確ではないかもしれませんが、おそらく要件です:

Vue-cli を使用して複数エントリ、複数ページのサイトを構築します。つまり、複数の .html ファイルが html-webpack を通じて生成されます。 -plugin プラグイン。デフォルトでは、http://www.xxx.com/xxx/xxx のような、index.html エントリのみが履歴モードを使用できます。一方、他のエントリは、次のようなハッシュ モードのみを使用できます。 http://www.xxx.com/admin.html#/xxx/xxx、webpack-dev-middleware がすべてのルートをindex.html ファイルにポイントするため、履歴モードが必要となり、問題が発生します。大変です。

本当に多すぎます。次に、記事を書き終えたところ、connect-history-api-fallback プラグインがこれを行うことを発見しました...

メソッドは次のように更新されます:

ビルドを変更する/dev-server.js ファイル


app.use(require('connect-history-api-fallback')())
ログイン後にコピー

Change become


var history = require('connect-history-api-fallback')
app.use(history({
  rewrites: [
    { from: 'index', to: '/index.html'}, // 默认入口
    { from: /\/backend/, to: '/backend.html'}, // 其他入口
    { from: /^\/backend\/.*$/, to: '/backend.html'},
  ]
}))
ログイン後にコピー

特定のルールを参照してください: https://github.com/bripkens/connect-history-api-fallback

--- ----------- 次のコードは無視してください- -------------

次に、すべてのエントリが履歴モードをサポートするようにいくつかの変更を加えてみましょう:

まず 1. 、ビルド ディレクトリ ファイルに setup-dev-server.js を作成します。内部のコードは次のとおりです:


const path = require('path')
const webpack = require('webpack')
const clientConfig = require('./webpack.dev.conf') // 引入开发环境下的 webpack 配置文件

module.exports = function setupDevServer(app, opts) {
  const clientCompiler = webpack(clientConfig)
  // 加载 webpack-dev-middleware 插件
  const devMiddleware = require('webpack-dev-middleware')(clientCompiler, {
    publicPath: clientConfig.output.publicPath,
    stats: {
      colors: true,
      chunks: false
    }
  })
  app.use(devMiddleware)
  // 关键代码开始
  // 因为开发环境下, 所有的文件都在内存里, 包括由 html-webpack-plugin 生成的 .html 文件, 所以我们需要用 webpack-dev-middleware 提供的 api 从内存里读取
  clientCompiler.plugin('done', () => {
    const fs = devMiddleware.fileSystem // 访问内存
    const filePath = path.join(clientConfig.output.path, 'index.html') // 读取的文件, 文件名和 html-webpack-plugin 生成的文件名要求一致
    if (fs.existsSync(filePath)) { // 判断下文件是否存在
      const index = fs.readFileSync(filePath, 'utf-8') // 从内存里取出
      opts.indexUpdated(index) // 将取出的文件通过 indexUpdated 函数返回, 这个函数怎么来的, 后面会说明
    }
    const adminPath = path.join(clientConfig.output.path, 'backend.html') // 同上, 这是第二个入口生成的 .html 文件, 如果还有其他入口, 这个多复制几份
    if (fs.existsSync(adminPath)) {
      const admin = fs.readFileSync(adminPath, 'utf-8')
      opts.adminUpdated(admin)
    }
  })

  // 加载热重载模块
  app.use(require('webpack-hot-middleware')(clientCompiler))
  var hotMiddleware = require('webpack-hot-middleware')(clientCompiler)
  // 当修改 html-webpack-plugin 模版时, 自动刷新整个页面
  clientCompiler.plugin('compilation', function(compilation) {
    compilation.plugin('html-webpack-plugin-after-emit', function(data, cb) {
      hotMiddleware.publish({
        action: 'reload'
      })
      cb()
    })
  })
}
ログイン後にコピー

2. build/dev-server.js ファイルを変更します

主に var からファイルを変更します。 app = Express() から module.exports = app.listen(port, function (err) {


var app = express()

var indexHTML
var adminHTML

// 引用前面创建的文件, 并将两个保存内容的函数传过去, 这里保存内容的变量写成对象或者数组也可以, 还可以少点代码
require('../config/setup-dev-server')(app, {
  indexUpdated: index => {
    indexHTML = index
  },
  adminUpdated: index => {
    adminHTML = index
  },
})

// 加载反向代理
Object.keys(proxyTable).forEach(function(context) {
  var options = proxyTable[context]
  if (typeof options === 'string') {
    options = {
      target: options
    }
  }
  app.use(proxyMiddleware(context, options))
})
// 设置静态文件夹路由
var staticPath = path.posix.join(config.assetsPublicPath, config.assetsSubDirectory)
app.use(staticPath, express.static('./static'))

// 入口1路由
app.get(['/', '/category/:id'], (req, res) => {
  res.send(indexHTML)
})

// 入口2路由
app.get(['/backend', '/backend/*'], (req, res) => {
  res.send(adminHTML)
})

// 404 页面
app.get('*', (req, res) => {
  res.send('HTTP STATUS: 404')
})

app.use(function(req, res, next) {
  var err = new Error('Not Found')
  err.status = 404
  next(err)
})

app.use(function(err, req, res) {
  res.status(err.status || 500)
  res.send(err.message)
})

module.exports = app.listen(port, function(err) {
ログイン後にコピー

3.npm run dev 間のコード 楽しくコードを書き始めましょう

関連する推奨事項:

HTML5ヒストリーモードとは

HTML5のヒストリーモードの詳細な説明

ヒストリーのいくつかの方法

以上がVue-cli を複数ページをサポートする履歴モードに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows Hello のサポートされていないカメラの問題を解決する方法 Windows Hello のサポートされていないカメラの問題を解決する方法 Jan 05, 2024 pm 05:38 PM

Windows Shello を使用しているときに、対応しているカメラが見つからない場合は、使用しているカメラが顔認証に対応していない、カメラドライバーが正しくインストールされていないなどが原因として考えられますので、設定方法を見てみましょう。 Windowshello でサポートされているカメラ チュートリアルが見つかりません: 理由 1: カメラ ドライバーが正しくインストールされていません 1. 一般的に、Win10 システムはほとんどのカメラのドライバーを自動的にインストールできます。次のように、カメラを接続した後に通知が表示されます; 2.このとき、デバイスを開き、マネージャーでカメラドライバーがインストールされているかどうかを確認し、インストールされていない場合は手動で行う必要があります。 WIN+X、次にデバイス マネージャーを選択します; 3. デバイス マネージャー ウィンドウでカメラ オプションを展開すると、カメラ ドライバー モデルが表示されます。

長所と短所の分析: オープンソース ソフトウェアの長所と短所を詳しく見る 長所と短所の分析: オープンソース ソフトウェアの長所と短所を詳しく見る Feb 23, 2024 pm 11:00 PM

オープンソース ソフトウェアの長所と短所: オープンソース プロジェクトの長所と短所を理解するには、具体的なコード例が必要です。 今日のデジタル時代において、オープンソース ソフトウェアはますます注目と尊敬を集めています。オープンソース ソフトウェアは、協力と共有の精神に基づいたソフトウェア開発モデルとして、さまざまな分野で広く使用されています。ただし、オープンソース ソフトウェアには多くの利点があるにもかかわらず、いくつかの課題や制限もあります。この記事では、オープンソース ソフトウェアの長所と短所を詳しく掘り下げ、具体的なコード例を通じてオープンソース プロジェクトの長所と短所を示します。 1. オープンソース ソフトウェアの利点 1.1 オープン性と透明性 オープンソース ソフトウェア

PyCharm Community Edition は十分なプラグインをサポートしていますか? PyCharm Community Edition は十分なプラグインをサポートしていますか? Feb 20, 2024 pm 04:42 PM

PyCharm Community Edition は十分なプラグインをサポートしていますか?特定のコード例が必要 ソフトウェア開発の分野で Python 言語がますます広く使用されるようになるにつれて、プロ仕様の Python 統合開発環境 (IDE) として PyCharm が開発者に好まれています。 PyCharmはプロフェッショナル版とコミュニティ版の2つのバージョンに分かれており、コミュニティ版は無料で提供されますが、プラグインのサポートがプロフェッショナル版に比べて制限されています。そこで問題は、PyCharm Community Edition は十分なプラグインをサポートしているかということです。この記事では、具体的なコード例を使用して、

ASUS TUF Z790 PlusはASUS MCP79メモリ周波数と互換性があります ASUS TUF Z790 PlusはASUS MCP79メモリ周波数と互換性があります Jan 03, 2024 pm 04:18 PM

ASUS tufz790plus はメモリ周波数をサポート ASUS TUFZ790-PLUS マザーボードは、デュアルチャネル DDR4 メモリをサポートし、最大 64GB のメモリをサポートする高性能マザーボードです。そのメモリ周波数は非常に強力で、最大 4800MHz です。サポートされる具体的なメモリ周波数には、2133MHz、2400MHz、2666MHz、2800MHz、3000MHz、3200MHz、3600MHz、3733MHz、3866MHz、4000MHz、4133MHz、4266MHz、4400MHz、4533MHz、4600MHz、4733MHz、4800MHzが含まれます。 。日常使用でも、高パフォーマンスのニーズでも

Flask-Babel を使用して多言語サポートを実装する方法 Flask-Babel を使用して多言語サポートを実装する方法 Aug 02, 2023 am 08:55 AM

Flask-Babel を使用して多言語サポートを実現する方法 はじめに: インターネットの継続的な発展に伴い、多言語サポートはほとんどの Web サイトやアプリケーションに必要な機能になりました。 Flask-Babel は、Babel ライブラリに基づいて多言語サポートを提供する、便利で使いやすい Flask 拡張機能です。この記事では、Flask-Babel を使用して多言語サポートを実現する方法を紹介し、コード例を添付します。 1. Flask-Babel をインストールする 開始する前に、まず Flask-Bab をインストールする必要があります。

GTX960 と XP システム間の互換性と関連手順 GTX960 と XP システム間の互換性と関連手順 Dec 28, 2023 pm 10:22 PM

XP システムを使用しており、グラフィック カードを gtx960 にアップグレードしたいと考えているユーザーもいますが、gtx960 が XP システムをサポートしているかどうかはわかりません。実はgtx960はXP系をサポートしています。公式WebサイトからXPシステムに適したドライバーをダウンロードするだけで、gtx960を使用できるようになります。以下、具体的な手順を見ていきましょう。 gtx960 は XP システムをサポートしていますか: GTX960 は XP システムと互換性があります。ドライバーをダウンロードしてインストールするだけで準備完了です。まず、NVIDIA 公式 Web サイトを開いて、ホームページに移動する必要があります。次に、ページの上にあるラベルまたはボタンを見つける必要があります。おそらく「ドライバー」というラベルが付いています。このオプションを見つけたら、クリックする必要があります

国際化サポートのために Hyperf フレームワークを使用する方法 国際化サポートのために Hyperf フレームワークを使用する方法 Oct 22, 2023 am 08:14 AM

Hyperf フレームワークを使用して国際サポートを行う方法 グローバリゼーションの急速な発展に伴い、さまざまな国や地域のユーザーのニーズを満たすために、多くのアプリケーションに多言語サポート機能が必要になります。 Hyperf フレームワークは、軽量で高性能のフレームワークとして、国際的なサポート機能を提供し、開発者が多言語アプリケーションを迅速に開発できるように支援します。この記事では、Hyperf フレームワークでの国際化機能の使用方法を紹介し、対応するコード例を示します。 1. 多言語サポートの構成 まず、Hyperf 構成ファイルを構成する必要があります。

セキュア ブートを有効にすることは、win11 をアップグレードするための必須条件ですか?セキュアブートを有効にする方法 セキュア ブートを有効にすることは、win11 をアップグレードするための必須条件ですか?セキュアブートを有効にする方法 Jan 29, 2024 pm 08:33 PM

ご存知のとおり、win11 システムをインストールするには、コンピューターが TPM2.0 をサポートし、セキュア ブートがオンになっていることを確認する必要があります。コンピューターが win11 のインストールに失敗する場合は、セキュア ブートがオンになっていないことが原因である可能性があります。以下は、一部のブランドのコンピューターでセキュア ブートを有効にするためのチュートリアルです。 win11 にアップグレードするときにセキュア ブートをサポートする必要があるというメッセージが表示された場合はどうすればよいですか? 1. ASUS マザーボード 1. まず、中国語に切り替えて、キーボードの F7 を押して、プロンプトに従って詳細設定を開きます。 3. 次に、「キー管理」を選択します。 2. Lenovo コンピューター 1. 2020 年より前の Lenovo コンピューター モデルの場合は、F2 を使用して BIOS 設定を入力し、上でセキュリティを選択する必要があります。 2. [セキュリティ] タブで、[セキュアブート] をドロップし、[E] に変更します。

See all articles