vue 를 사용 하여 다 중 페이지 응용 을 구축 하 는 예제

먼저 한 페이지 와 여러 페이지 의 차 이 를 알 아 보 세 요.
mm
다 중 응용 프로그램 MPA
단일 페이지 응용 모드 SPA
응용 구성
여러 개의 전체 페이지 로 구성 되 어 있다.
하나의 케이스 페이지 와 여러 페이지 세 션 으로 구성 되 어 있 습 니 다.
점프 모드
페이지 간 의 이동 은 한 페이지 에서 다른 페이지 로 이동 하 는 것 이다.
페이지 세 션 사이 의 점프 는 한 페이지 세 션 을 삭제 하거나 숨 기 고 다른 페이지 세 션 을 불 러 와 표시 하 는 것 입 니 다.이것 은 세 션 간 의 아 날로 그 점프 입 니 다.케이스 페이지 를 열지 않 았 습 니 다.
이동 후 공공 자원 을 다시 불 러 올 지 여부
예.
아니.
URL 모드
http://xxx/page1.html 
http://xxx/page1.html
http://xxx/shell.html#page1 
http://xxx/shell.html#page2
사용자 체험
페이지 간 전환 로드 가 느 리 고 원활 하지 않 으 며 사용자 체험 이 좋 지 않 습 니 다.특히 모 바 일 장치 에서.
페이지 세 션 간 의 전환 이 빠 르 고 사용자 체험 이 좋 으 며 모 바 일 장치 에 포함 되 어 있 습 니 다.
필드 전환 애니메이션 을 실현 할 수 있 습 니까?
실현 불가능
실현 하기 쉽다.
페이지 간 전달 데이터
URL,쿠키 또는 localstorage 에 의존 하여 번 거 로 움 을 실현 합 니 다.
한 페이지 내 에서 페이지 간 에 데 이 터 를 전달 하 는 것 이 쉽게 이 루어 지기 때문이다.
검색엔진 최적화(SEO)
그냥 해도 돼 요.
단독 방안 이 필요 해서 좀 번거롭다
특별 적용 범위
검색엔진 에 우호 적 인 사이트 가 필요 합 니 다.
체험 에 대한 요구 가 높 은 응용,특히 모 바 일 응용
검색엔진 최적화(SEO)
그냥 해도 돼 요.
단독 방안 이 필요 해서 좀 번거롭다
개발 난이도
낮 게,프레임 선택 이 쉽다.
좀 높 으 면 이런 모델 의 개발 난이 도 를 낮 추 는 전문 적 인 틀 이 필요 하 다.
왜 Vue 로 여러 페이지 를 써 요?
vue 는 하나의 도구 일 뿐 이 고 그 를 dom 을 조작 하 는 도구 로 삼 아 여러 페이지 를 쓴다.한 페이지 의 장점 이 있 는 동시에 여러 페이지 의 표현 형식(구체 적 으로 수 요 를 봐 야 한다)
다 중 페이지 응용 프로그램 구축
준비 작업
새 항목 을 만 들 려 면 항목"glob":"^7.0.3"의 의존 이 필요 합 니 다.
웹 팩 설정 수정
변경 할 파일 이 필요 합 니 다.
  • utils.js
  • webpack.base.conf.js
  • webpack.dev.conf.js
  • webpack.prod.conf.js
  • utils.js 마지막 에 추가
    
    // utils.js  
    /*          ----------------------------    */
    
    // glob webpack             ,         *   ,   lib/*.js    lib       js      
    var glob = require('glob')
    //     
    var HtmlWebpackPlugin = require('html-webpack-plugin')
    //          ,       ,   src     pages   
    var PAGE_PATH = path.resolve(__dirname, '../src/pages')
    //       merge  
    var merge = require('webpack-merge')
    //     
    //   glob    pages              js    ,       
    //          
    exports.entries = function () {
      var entryFiles = glob.sync(PAGE_PATH + '/*/*.js')
      var map = {}
      entryFiles.forEach((filePath) => {
        var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
        map[filename] = filePath
      })
      return map
    }
    
    //       
    //              ,  pages        html    ,       
    exports.htmlPlugin = function () {
      let entryHtml = glob.sync(PAGE_PATH + '/*/*.html')
      let arr = []
      entryHtml.forEach((filePath) => {
        let filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
        let conf = {
          //     
          template: filePath,
          //     
          filename: filename + '.html',
          //           js  ,                  js  
          chunks: ['manifest', 'vendor', filename],
          inject: true
        }
        if (process.env.NODE_ENV === 'production') {
          conf = merge(conf, {
            minify: {
              removeComments: true,
              collapseWhitespace: true,
              removeAttributeQuotes: true
            },
            chunksSortMode: 'dependency'
          })
        }
        arr.push(new HtmlWebpackPlugin(conf))
      })
      return arr
    }
    /*          ----------------------------    */
    webpack.base.conf.js 파일
    
    module.exports = {
     /*      ----------------    */
     entry: utils.entries(),
     /*      ----------------    */
     output: {
      path: config.build.assetsRoot,
    webpack.dev.conf.js 파일
    
      // https://github.com/glenjamin/webpack-hot-middleware#installation--usage
      new webpack.HotModuleReplacementPlugin(),
      new webpack.NoEmitOnErrorsPlugin(),
      // https://github.com/ampedandwired/html-webpack-plugin
      /*           -------------    */
      // new HtmlWebpackPlugin({
      //  filename: 'index.html',
      //  template: 'index.html',
      //  inject: true
      // }),
      /*           -------------    */
      new FriendlyErrorsPlugin()
    
      /*    .concat(utils.htmlPlugin()) ------------------ */
     ].concat(utils.htmlPlugin())
    })
    webpack.prod.conf.js 파일
    
      new OptimizeCSSPlugin({
       cssProcessorOptions: {
        safe: true
       }
      }),
      // generate dist index.html with correct asset hash for caching.
      // you can customize output by editing /index.html
      // see https://github.com/ampedandwired/html-webpack-plugin
    
      /*           ----------------------    */
      // new HtmlWebpackPlugin({
      //  filename: config.build.index,
      //  template: 'index.html',
      //  inject: true,
      //  minify: {
      //   removeComments: true,
      //   collapseWhitespace: true,
      //   removeAttributeQuotes: true
      //   // more options:
      //   // https://github.com/kangax/html-minifier#options-quick-reference
      //  },
      //  // necessary to consistently work with multiple chunks via CommonsChunkPlugin
      //  chunksSortMode: 'dependency'
      // }),
      /*           ----------------------    */
    
      // split vendor js into its own file
      new webpack.optimize.CommonsChunkPlugin({
       name: 'vendor',
       minChunks: function (module, count) {
        // any required modules inside node_modules are extracted to vendor
        return (
         module.resource &&
         /\.js$/.test(module.resource) &&
         module.resource.indexOf(
          path.join(__dirname, '../node_modules')
         ) === 0
        )
       }
      }),
      // extract webpack runtime and module manifest to its own file in order to
      // prevent vendor hash from being updated whenever app bundle is updated
      new webpack.optimize.CommonsChunkPlugin({
       name: 'manifest',
       chunks: ['vendor']
      }),
      // copy custom static assets
      new CopyWebpackPlugin([{
       from: path.resolve(__dirname, '../static'),
       to: config.build.assetsSubDirectory,
       ignore: ['.*']
      }])
      /*       .concat(utils.htmlPlugin()) ------------------- */
     ].concat(utils.htmlPlugin())
    })
    if (config.build.productionGzip) {
     var CompressionWebpackPlugin = require('compression-webpack-plugin')
    
     webpackConfig.plugins.push(
      new CompressionWebpackPlugin({
       asset: '[path].gz[query]',
       algorithm: 'gzip',
       test: new RegExp(
        '\\.(' +
        config.build.productionGzipExtensions.join('|') +
        ')$'
       ),
       threshold: 10240,
       minRatio: 0.8
      })
     )
    }
    
    if (config.build.bundleAnalyzerReport) {
     var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
     webpackConfig.plugins.push(new BundleAnalyzerPlugin())
    }
    
    module.exports = webpackConfig
    src 는 제 가 사용 하 는 프로젝트 파일 입 니 다.asset,components,pages 는 각각 정적 자원 파일,구성 요소 파일,페이지 파일 입 니 다.

    pages 는 프로젝트 의 모듈 에 따라 분 리 된 폴 더 로 각 모듈 마다 세 가지 내용 이 있 습 니 다.vue 파일,js 파일,html 파일 입 니 다.이 세 파일 의 역할 은 SPA 단일 페이지 를 응용 할 때 루트 디 렉 터 리 의 index.html 페이지 템 플 릿,src 파일 의 main.js 와 app.vue 기능 에 해당 합 니 다.
    원래 입구 파일 은 Main.js 가 하나 밖 에 없 었 는데 지금 은 여러 페이지 이기 때문에 입구 도 많 지 않 습 니 다.저 는 현재 두 개 입 니 다.index 와 cell.그 다음 에 포장 하면 dist 폴 더 에서 html 파일 두 개 를 생 성 합 니 다.index.html 과 cell.html(단일 페이지 응용 을 참고 할 때 포장 은 하나의 Index.html 만 생 성 합 니 다)
    참고:
    https://www.jb51.net/article/146566.htm
    이상 은 vue 를 사용 하여 다 중 페이지 응용 을 구축 하 는 예제 의 상세 한 내용 입 니 다.vue 구축 다 중 페이지 응용 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기