LoginSignup
2
2

More than 5 years have passed since last update.

Vue.js URLからハッシュを除去してURL直接指定で表示(History モード)

Last updated at Posted at 2018-07-27

はじめに

vue.jsのプロジェクトはデフォルトだと、URLにハッシュが付く(例: http://localhost/#/abc )が、それをやめて、直接指定URL(例: http://localhost/abc )にしたものをサーバーで公開する方法についてです。
catch-allフォールバックしていない状態で、サーバーに公開すると404になると思うので、それの回避策でもあります。

背景

vue routerの公式ページのNative Node.jsにやり方が書いてあったが、それだと動かず、Node.js (Express) でやったが、やり方の説明が簡潔すぎてすぐ出来なったので、この記事に残しておこうと思いました。。
→ vue.js のgithubにプルリクエスト中

やり方

vue.jsの自分のプロジェクトをプロダクションビルド

npmだったら

terminal
$ npm run build

とかだとおもいます。これで distフォルダにビルドしたvue.jsプロジェクトが展開されると思います。

node.jsのプロジェクト作成

適当なフォルダを作って、そこにnpmプロジェクトを作ります。

terminal
$ mkdir express_project
$ npm init

色々聞かれますが、適当にenterしていきます。
その後、
さきほどビルドしたvue.jsの distフォルダを このexpress_project内にコピーします。

Expressなどインストール

Webサーバー用にExpress、catch-allフォールバック(404をindex.htmlで処理する)用にconnect-history-api-fallbackをインストール

terminal
$ npm i express connect-history-api-fallback -s

 node.jsのコードを書く

 catch-allフォールバックしながら、distフォルダを3000ポートでListenするためのコードを最小限で書く。

terminal
$ vim express_project/app.js
app.js
const express = require('express')
const history = require('connect-history-api-fallback')
const app = express()
const server = app
    .use(history())
    .use(express.static('dist'))
    .listen(3000, () => {
        console.log('Node.js is listening to PORT:' + server.address().port)
    })

この時点でexpress_projectフォルダ内は下記の様な感じになっていると思います。

express_project
├── dist
│   ├── index.html
│   └── static
├── app.js
├── node_modules
├── package-lock.json
└── package.json

 実行

terminal
$ node app.js

これで、
http://localhost:3000/abc
でも意図したものが表示されると思います。

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2