vue-routerは必要に応じてcomponentをロードします:()=>import()エラーの解決を報告します。
6423 ワード
vueの単一ページ(SPA)プロジェクトは、必ずルートが必要な問題に関連します。
以前は私達はこのようにしました。
//require.ensureはwebpackの中にあります。このようにすると単独で一つのchunkファイルとして引き出します。
const Login=r=>require.ensure()=>r(require('./component/Login.vue'))
でも、今はvue-routerの公式サイトを見て、このような方法を紹介します。
//vue非同期コンポーネントとwebpackの【コードブロックポイント】機能を組み合わせ、必要に応じてロードすることを実現しました。
const App=>import('./component/Login.vue')
しかし、多くの場合、npm run devコンソールをこのように書いて直接エラーを報告するのはなぜですか?
Module build failed:SyntaxErrer:Unxpected token
元々はimportですが、ここで間違えました。これはbabelのプラグインが必要です。vue-routerの公式サイトには一部のヒントがあります。
Babelを使用する場合は、syntax-dynamic-mportプラグインを追加する必要があります。Babelが文法を正確に解析することができます。
これで問題は全部解決しました。
vue-cliを使ってプロジェクトを生成すると、バーベル-loaderに上のプラグインが配置されていない可能性が高いです。この時、私達は自分でこのプラグインをインストールする必要があります。
cnpm install babel-plugin-syntax-dynamic-mport--save-dev
webpackのjsのloader部分を修正します。
const App=>import('./component/Login.vue')
の文法です。ページが出てきました。
包装する時、私達がもしこのように書くだけならばを発見して、出現のchunkが名前を包むのはすべて乱れていて、もし私達は命名を指定するならば、どうすればいいですか?webpack 3はMagic Comments(魔法コメント)を提供しています。
constアプリ=>import(/*webpackChunkName:'login'./component/Login.vue')
こうして私たちは包装したchunkに名前を指定して、最終的にlogin.jsのchunkカバンを作ります。
補足知識:Vueは授権するかどうかによって、異なるルート(vue-routerダイナミックルート)を飛びます。
機能点:プロジェクトの実行には、まずバックグラウンドを要求し、バックグラウンドの戻り結果によって、対応ルートにジャンプします。もしユーザが最初のページにジャンプすることを許可していないなら、権限ページにジャンプして許可を行います。
実現コードは以下の通りです。
routerフォルダのindex.js
以前は私達はこのようにしました。
//require.ensureはwebpackの中にあります。このようにすると単独で一つのchunkファイルとして引き出します。
const Login=r=>require.ensure()=>r(require('./component/Login.vue'))
でも、今はvue-routerの公式サイトを見て、このような方法を紹介します。
//vue非同期コンポーネントとwebpackの【コードブロックポイント】機能を組み合わせ、必要に応じてロードすることを実現しました。
const App=>import('./component/Login.vue')
しかし、多くの場合、npm run devコンソールをこのように書いて直接エラーを報告するのはなぜですか?
Module build failed:SyntaxErrer:Unxpected token
元々はimportですが、ここで間違えました。これはbabelのプラグインが必要です。vue-routerの公式サイトには一部のヒントがあります。
Babelを使用する場合は、syntax-dynamic-mportプラグインを追加する必要があります。Babelが文法を正確に解析することができます。
これで問題は全部解決しました。
vue-cliを使ってプロジェクトを生成すると、バーベル-loaderに上のプラグインが配置されていない可能性が高いです。この時、私達は自分でこのプラグインをインストールする必要があります。
cnpm install babel-plugin-syntax-dynamic-mport--save-dev
webpackのjsのloader部分を修正します。
{
test: /\.js$/,
loader:'babel-loader',
options:{
plugins:['syntax-dynamic-import']
},
},
オプトオプションを追加しました。これで私たちを識別できます。const App=>import('./component/Login.vue')
の文法です。ページが出てきました。
包装する時、私達がもしこのように書くだけならばを発見して、出現のchunkが名前を包むのはすべて乱れていて、もし私達は命名を指定するならば、どうすればいいですか?webpack 3はMagic Comments(魔法コメント)を提供しています。
constアプリ=>import(/*webpackChunkName:'login'./component/Login.vue')
こうして私たちは包装したchunkに名前を指定して、最終的にlogin.jsのchunkカバンを作ります。
補足知識:Vueは授権するかどうかによって、異なるルート(vue-routerダイナミックルート)を飛びます。
機能点:プロジェクトの実行には、まずバックグラウンドを要求し、バックグラウンドの戻り結果によって、対応ルートにジャンプします。もしユーザが最初のページにジャンプすることを許可していないなら、権限ページにジャンプして許可を行います。
実現コードは以下の通りです。
routerフォルダのindex.js
import Vue from "vue";
import Router from "vue-router";
Vue.use(Router);
let router =new Router({
routes:[]
});
//
router.beforeEach((to,from,next)=>{
// ,
if(!to.name){
alert(" License , ");
next("/licenseManage");
}else{
next();
}
})
export default router;
routerフォルダのaccessRouters.js(異なるルートを定義する)
import index from "@/views/index";
export default{
//
hasAccessRouters:[
{
path:"/",
name:"index",
component:index,
redirect:"preIntegrationTest",
children:[
{
path:"/preIntegrationTest",
name:"preIntegrationTest",
components:{
listPage:resolve =>{
require(["@/views/pages/preIntegrationTest"],resolve)
}
},
props:{}
},{
path:"/about",
name:"about",
components:{
listPage:resolve =>{
require(["@/views/pages/about"],resolve)
}
},
props:{}
},{
path:"/help",
name:"help",
components:{
listPage:resolve =>{
require(["@/views/pages/help"],resolve)
}
},
props:{}
}
}
],
//
noAccessRouters:[
{
path:"/",
name:"index",
component:index,
redirect:"licenseManage",
children:[
{
path:"/licenseManage",
name:"licenseManage",
components:{
listPage:resolve =>{
require(["@/views/systemSetting/licenseManage"],resolve)
}
},
props:{}
}
}
]
}
]
}
storeのindex.jsは倉庫内の変数を定義します。
import Vue from "vue";
import Vuex from "vuex";
import mutations from "./mutations";
import actions from "actions";
Vue.use(Vuex);
const store = new Vuex.store({
state:{
axios:axios.create({baseURL:"",transformRequest:[]}),
authorized:false
},
getters:{},
mutations,
actions
});
export default store;
muttion.jsは状態ライブラリのauthorizedの値を変更する方法を定義し、動的なルーティングをロードする。
import router from "@/router/index";
import accessRouters from "@/router/accessRouters";
const mutations={
setAuthorized(state,payload){
if(payload){
//
// /preIntegrationTest
router.addRoutes(accessRouters.hasAccessRouters);
let url=location.hash.substring(1)==='/'?'/preIntegrationTest':location.hash.substring(1);
router.push('url');
}else{
// ,
router.push('/licenseManage');
}
//
state.authorized=payload;
}
}
export default mutations;
action.jsはバックグラウンドインターフェースに結果を返してもらい、store状態ライブラリの変数に値を与えます。
const actions={
addInterceptors({state,commit}){
// --
state.axios.interceptors.response.use(
function(response){
//
return response
},function(error){
if(error.response.status === 403){
commit("setAuthorized",false)
}
//
return Promise.reject(error)
}
)
},
setAuthorized({dispatch,state}){
dispatch("addInterceptors");
state.axios.get('url****').then(function(response){
if(response.data.code === "1"){
state.authorized = true;
router.addRoutes(accessRouters.hasAccessRouters);
let url=location.hash.substring(1)==="/"?"/preIntegrationTest":location.hash.substring(1);
router.push(url);
}else{
//
state.authorized = false;
router.addRoutes(accessRouters.noAccessRouters);
router.push("/licenseManage");
}
}).catch(function(error){
console.log(error)
//
state.authorized = false;
router.addRoutes(accessRouters.noAccessRouters);
router.push("/licenseManage");
})
}
}
export default actions;
以上のこのvue-routerは必要に応じてcomponentをロードします。(=>import()エラーの解決は小編集が皆さんに共有しているすべての内容です。参考にしていただければ幸いです。どうぞよろしくお願いします。