vue-routerは必要に応じてcomponentをロードします:()=>import()エラーの解決を報告します。


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部分を修正します。

{
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()エラーの解決は小編集が皆さんに共有しているすべての内容です。参考にしていただければ幸いです。どうぞよろしくお願いします。