vue-cli 搭建多頁面應用基礎結構

1.全局安裝vue-cli
npm install -g vue-cli
2.基於webpack項目模板建立項目
vue init webpack demo
3.在模板項目的基礎上,調整項目目錄結構
在src目錄下新建modules,pages文件夾用來存放模塊和頁面。實際項目的每一個頁面都再單獨建一個文件夾並存放在pages文件夾中。注意pages下每一個文件夾下的各頁面入口js文件必須和模板文件(html文件)的名稱保持一致。
src目錄結構:
components存放公用組件
router存放頁面的路由配置
assets存放頁面的靜態資源
modules存放公用模塊
pages存放頁面
4.在build/utils.js中按如下內容修改變量聲明,並添加兩個方法:webpack多入口文件和多頁面輸出javascript

var path = require('path')
var config = require('../config')
var ExtractTextPlugin = require('extract-text-webpack-plugin')
var glob = require('glob')
var HtmlWebpackPlugin = require('html-webpack-plugin')
var PAGE_PATH = path.resolve(__dirname, '../src/pages')
var merge = require('webpack-merge')
var packageConfig = require('../package.json')

//多入口配置
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
}

//多頁面輸出配置
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',
      chunks: ['manifest', 'vendor', filename],
      inject: true
    }
    if (process.env.NODE_ENV === 'production') {
      conf = merge(conf, {
        chunks: ['manifest', 'vendor', filename],
        minify: {
          removeComments: true,
          collapseWhitespace: true,
          removeAttributeQuotes: true
        },
        chunksSortMode: 'dependency'
      })
    }
    arr.push(new HtmlWebpackPlugin(conf))
  })
  return arr
}

5.修改build/webpack.base.conf.js的入口配置html

module.exports = {
  entry: utils.entries(),
...

6.修改build/webpack.dev.conf.js和build/webpack.prod.conf.js的多頁面配置:把原有的頁面模板配置註釋或刪除,並把多頁面配置添加到plugins
webpack.dev.conf.js:vue

plugins: [
    ......
    //  new HtmlWebpackPlugin({
    //    filename: 'index.html',
    //    template: 'index.html',
    //    inject: true
    //  }),
    ......
  ].concat(utils.htmlPlugin())

webpack.prod.conf.js:java

plugins: [
    ......
    // new HtmlWebpackPlugin({
    //   filename: config.build.index,
    //   template: 'index.html',
    //   inject: true,
    //   minify: {
    //     removeComments: true,
    //     collapseWhitespace: true,
    //     removeAttributeQuotes: true
    //   },
    //   chunksSortMode: 'dependency'
    // }),
    ......
  ].concat(utils.htmlPlugin())
多頁面應用建立完畢,在pages目錄下建立應用對應的頁面文件。
相關文章
相關標籤/搜索