vue-cli 多页面配置

参考:

https://github.com/bluefox1688/vue-cli-multi-page(参考多页面配置整体思想)
https://github.com/luchanan/vue2.0-multi-page (参考整个文件命名架构)


主要入口配置:

 1 . 依赖:glob
  npm install glob -D
 2 . 在哪使用:

   build/utils.js

  const glob = require('glob');
//多入口配置
//获取js入口文件
exports.getEntries = function (globPath,type) {
  var entries = {},pathname;
  var ishtml=type!==undefined?true:false;
  /**
   * 读取src目录,并进行路径裁剪
   */
  glob.sync(globPath).forEach(function (entry) {
    /**
     * path.basename 提取出用 ‘/' 隔开的path的最后一部分,除第一个参数外其余是需要过滤的字符串
     * path.extname 获取文件后缀
     */
    // var basename = path.basename(entry, path.extname(entry), 'router.js') // 过滤router.js
    // ***************begin***************
    // 当然, 你也可以加上模块名称, 即输出如下: { module/main: './src/module/index/main.js', module/test: './src/module/test/test.js' }
    // 最终编译输出的文件也在module目录下, 访问路径需要时 localhost:8080/module/index.html
    // slice 从已有的数组中返回选定的元素, -3 倒序选择,即选择最后三个
    //以ocahost:8080/homeIndex.html这样形式访问
    if(ishtml){
      //html以模块文件作为输出
      //以locahost:8080/views/index.html这样形式访问
      /*var tmp = entry.split('/').splice(-3)
      var moduleName = tmp.slice(0, 2).join("/");
      console.log(moduleName);
      entries[moduleName] = entry*/
      var tmp = entry.split('/').splice(-3)
      var moduleName = tmp.splice(0,2).join("/");
      entries[moduleName] = entry

    }
    else{
      //js以模块文件作为输出,比如indx.js
      var basename = path.basename(entry, path.extname(entry));
      tmp = entry.split('/').splice(-3);
      pathname = tmp.splice(1, 1);
      entries[pathname] = entry;
    }
    //以locahost:8080/views/index.html这样形式访问
    // var tmp = entry.split('/').splice(-3)
    // var moduleName = tmp.slice(1, 2);
    // console.log(moduleName);
    // entries[moduleName] = entry
  });
  // console.log(entries);
  // 获取的主入口如下: { main: './src/module/index/main.js', test: './src/module/test/test.js' }
  return entries;
}
 3 . 配置修改:

  build/webpack.base.conf.js

    //html输出依赖
    const HtmlWebpackPlugin = require('html-webpack-plugin')
    const entries = utils.getEntries('./src/'+config.moduleName+'/**/*.js'); // 获得入口js文件
    module.exports = {
        //...
        entry: entries,
        ...
        plugins:[] //添加打包输出
    }
    //读取项目结构中的html页面
    const pages = utils.getEntries('./src/'+config.moduleName+'/**/*.html',1);
    //循环打包
    for (var pathname in pages) {
      // 生成html相关配置
      var conf = {
        filename: pathname + '.html', // html文件输出路径
        template: pages[pathname],   // 模板路径
        inject: true,                // js插入位置
        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'
      };
      pathname=pathname.split("/")[1];//去掉views
      if (pathname in module.exports.entry) {
        conf.inject = 'body';
        //如果每个html没有进入这里的话,那么全部js将会插入html
        conf.chunks = ['flexible','flexible_css', pathname, 'vendor',       'manifest', 'bootstrap'],
          conf.hash = true;
      }
      module.exports.plugins.push(new HtmlWebpackPlugin(conf));
    }

  build/webpack.dev.conf.js

    module.exports = merge(baseWebpackConfig, {
      ...
        //把原来的输出注释
        // new HtmlWebpackPlugin({
        //   filename: 'index.html',
        //   template: 'index.html',
        //   inject: true
        // }),
    }

  build/webpack.pro.conf.js

    const webpackConfig = merge(baseWebpackConfig, {
      ...
      //把原来的输出注释并修改为
      // new webpack.optimize.CommonsChunkPlugin({
    //   name: 'vendor',
    //   minChunks: function (module) {
    //     // 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
    //     )
    //   }
    // }),
    }

改为

  
    // 提取公共模块
    new webpack.optimize.CommonsChunkPlugin({
      name: 'vendor',// 为公共模块起一个名称
      minChunks: function (module, count) {
        // any required modules inside node_modules are extracted to vendor
        // 提取全局依赖的库(主要是base.js中引入的vue, jquery等插件生成放到vuedor.js那里)
        var jsReg = /\.js$/.test(module.resource) &&
          module.resource.indexOf(
            path.join(__dirname, '../node_modules')
          ) === 0;


        // 公共UI库提提取
        // todo 这边可进行更精确的匹配
        // 提取的样式文件 vendor.[contenthash].css
        // var bootstrapUIReg = /bootstrap\.scss$/.test(module.resource);


        return (
          // module.resource && (jsReg || bootstrapUIReg)
          module.resource && jsReg
        )
      }
    }),

  开发环境配置修改:

      build/dev-server.js

           // var uri = 'http://localhost:' + port //注释掉原来的url
          var uri = 'http://localhost:' + port + '/'+config.moduleName+'/index.html' // 直接显示页面
          console.log('> Listening at ' + uri + '\n')

  自定义文件模块名:

      config/index.js

    module.exports = {
      //添加一个变量属性
      moduleName:"views",
    }

  项目结构修改:

webpack
 |---build
 |---src
     |---assets    #资源
     |---components 组件
     |---views    #各个页面模块,模块名可以自定义哦!
       |---index    #一级目录
          |---index.html    #html页面
          |---index.js    #html页面入口js
          |---app.vue    #html页面vue模板
       |---login    #一级目录
           |---index.html    #html页面
          |---index.js    #html页面入口js
          |---app.vue    #html页面vue模板
      ......
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容