Vue-cli创建单页面到多页面的方法实例代码

对于某些项目来说,单页面不能很好的满足需求,所以需要将vue-cli创建的单页面项目改为多页面项目。本文主要和大家介绍vue-cli创建项目从单页面到多页面的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

需要修改以下几个文件:

1、下载依赖glob

$npm install glob --save-dev

登录后复制

2、修改build下的文件

(1)修改webpack.base.conf.js

立即学习“前端免费学习笔记(深入)”;

添加以下代码:

var glob = require('glob');var entries = getEntry('./src/pages/**/*.js')

登录后复制

将module.exports中的

entry: {   app: './src/main.js'  },

登录后复制

注释掉,然后添加这一行代码:

 entry: entries,

登录后复制

至于entries是什么,别急呀,看下面:

添加一个方法:

//获取入口js文件function getEntry(globPath) { var entries = {},  basename, tmp, pathname; glob.sync(globPath).forEach(function (entry) {  basename = path.basename(entry, path.extname(entry));  pathname = basename.split("_")[0]; //index_main.js得到index  entries[pathname] = entry; }); return entries;}

登录后复制

这个文件修改成这样子就可以了。

(2)修改webpack.dev.conf.js

添加以下代码:

//引入var glob = require('glob')var path = require('path')

登录后复制

将module.exports中的plugins里的

new HtmlWebpackPlugin({  filename: 'index.html',  template: 'index.html',  inject: true}),

登录后复制

注释掉,然后添加以下代码:

function getEntry(globPath) {  var entries = {},basename; glob.sync(globPath).forEach(function (entry) {  basename = path.basename(entry, path.extname(entry));  entries[basename] = entry; }); return entries;}var pages = getEntry('src/pages/**/*.html');for (var pathname in pages) { // 配置生成的html文件,定义路径等 var conf = {  filename: pathname + '.html',  template: pages[pathname],  // 模板路径  inject: true,       // js插入位置  chunks:[pathname] }; module.exports.plugins.push(new HtmlWebpackPlugin(conf));}

登录后复制

这个文件修改到此就可以了。

(3)webpack.prod.conf.js

这个文件修改的套路与上一个文件类似
 添加以下代码: var glob = require(‘glob’) 因为项目在创建时,生成项目的时候是直接将可选的所有依赖都选择了yes,所以项目中的env的声明定义如下:

复制代码 代码如下:

var env = process.env.NODE_ENV === ‘testing ? require(‘../config/test.env’) : config.build.env ;

但是由于webpack.test.conf.js文件目前还没有进行修改,所以需要把这行声明换成下面这行:

var env = config.build.env

登录后复制

将webpackConfig中的plugins里的

new HtmlWebpackPlugin({  filename: config.build.index,  template: 'index.html',  inject: true,  minify: {   removeComments: true,   collapseWhitespace: true,   removeAttributeQuotes: true  },  chunksSortMode: 'dependency'}),

登录后复制

注释掉,在声明定义webpackConfig的后面添加以下代码:

function getEntry(globPath) { var entries = {},  basename; glob.sync(globPath).forEach(function (entry) {  basename = path.basename(entry, path.extname(entry));  entries[basename] = entry; }); return entries;}var pages = getEntry('src/pages/**/*.html');for (var pathname in pages) { var conf = {   filename: process.env.NODE_ENV === 'testing'    ? pathname + '.html'    : config.build[pathname],   template: pages[pathname],   inject: true,   minify: {    removeComments: true,    collapseWhitespace: true,    removeAttributeQuotes: true   },   chunks:[pathname]  } webpackConfig.plugins.push(new HtmlWebpackPlugin(conf));}

登录后复制

此时,这个文件也修改好了。

3、修改config下的文件

这个文件夹下,只需要修改一个文件:index.js 这个文件的作用是,寻找文件路径,然后根据这个文件设置的目录层级,生成打包后的文件以及相应的层级文件结构。 添加以下代码:

var build = { env: require('./prod.env'), assetsRoot: path.resolve(__dirname, '../dist'), assetsSubDirectory: 'static', assetsPublicPath: '/', productionSourceMap: true, productionGzip: false, productionGzipExtensions: ['js', 'css']}function getEntry(globPath) { var entries = {},basename; glob.sync(globPath).forEach(function(entry) {  basename = path.basename(entry, path.extname(entry));  entries[basename] = entry; }); return entries;}var pages = getEntry('src/pages/**/*.html'); //入口 index: path.resolve(__dirname, '../dist/index.html')for (var pathname in pages) { build[pathname] = path.resolve(__dirname, '../dist/' + pathname + '.html')}

登录后复制

然后将module.exports中的build的值换成我们刚刚添加声明的变量build。 如果希望修改打包后的目层级结构,可以在build中修改;还可以在build中增加我们需要定义的变量,比如我们需要将fabfile.py和favicon.ico拷贝到dist目录下的a目录下,就可以在build中定义一个属性,

distA:path.resolve(__dirname, '../dist/a),

登录后复制

然后因为在webpack.prod.conf.js中已经引入了’copy-webpack-plugin’(var CopyWebpackPlugin = require(‘copy-webpack-plugin’)),我们就可以在 webpackConfig.plugins下添加如下代码:

new CopyWebpackPlugin([  {   from: path.resolve(__dirname, '../fabfile.py'),   to: config.build.distA,   template: 'fabfile.py'  } ])new CopyWebpackPlugin([  {   from: path.resolve(__dirname, '../favicon.ico'),   to: config.build.distA,   template: 'favicon.ico'  } ])

登录后复制

在src目录下添加pages文件夹

目录的层级结构安排成类似于这种形式:

Vue-cli创建单页面到多页面的方法实例代码

5、打包

做完以上修改,虽然本地运行没有问题,但是打包后,还是会有问题,会出现报错:webpackJsonp is not defined
解决方式如下: 在webpack.prod.conf.js文件下的for (var pathname in pages)循环中定义的conf里,添加两行代码:

chunksSortMode: 'dependency', // dependency 页面中引入的js按照依赖关系排序;manual 页面中引入的js按照下面的chunks的数组中的顺序排序;chunks: ['manifest', 'vender', pathname] // 生成的页面中引入的js,'manifest', 'vender'这两个js是webpack在打包过程中抽取出的一些公共方法依赖,其中,'manifest'又是从'vender'中抽取得到的,所以这三个js文件的依赖关系是 pathname依赖 'vender','vender'依赖'manifest'.

登录后复制

综上,就是本次项目从单页面到多页面项目的转变历程,关于webpack.test.conf.js文件的修改,后续修改成功后,会继续补充添加。

相关推荐:

vue构建多页面应用实例代码分享

vue cli重构多页面脚手架实例分享

如何将 Vue-cli 改造成支持多页面的history模式

以上就是Vue-cli创建单页面到多页面的方法实例代码的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2787420.html

(0)
上一篇 2025年3月8日 18:07:23
下一篇 2025年3月1日 04:02:37

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue-cli与webpack处理静态资源的方法

    处理静态资源 你也许会注意到vue-cli与webpack结合的项目中,我们通常会有两个静态资源的路径:src/assets和static/,他们两者的区别是什么呢?本文主要和大家介绍了vue-cli与webpack结合如何处理静态资源,小…

    编程技术 2025年3月8日
    200
  • vue-cli项目中的proxyTable跨域问题

    什么是跨域? 同源策略规定了如果两个 url 的协议、域名、端口中有任何一个不等,就认定它们跨源了。本文主要和大家介绍了vue-cli项目中的proxyTable跨域问题小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编…

    2025年3月8日 编程技术
    200
  • vue-cli编写vue插件实例

    本文主要介绍了使用vue-cli编写vue插件的方法,利用vue组件创建模板,使用webpack打包生成插件再全局使用。 1、vue init webpack-simple 生成项目目录 2、调整目录结构 3、修改webpack.confi…

    2025年3月8日
    200
  • vue-cli开发多页面应用的简单示例

    创建项目 使用 vue-cli 创建一个项目 $ vue init webpack vue-multiple-demo 登录后复制 根据控制台的提示,填写相关信息即可。创建完成后,进入该项目根目录并安装依赖。 $ cd vue-multip…

    编程技术 2025年3月8日
    200
  • VUE-CLI @2.9.1以后版本的问题

    这次给大家带来vue-cli @2.9.1以后版本的问题,vue-cli @2.9.1之后版本的bug需要注意的事项有哪些,下面就是实战案例,一起来看一下。 bug (1)修改config目录下index.js的配置:把localhost改…

    2025年3月8日
    200
  • 解决Iview在vue-cli架子中字体图标丢失的方法

    这次给大家带来解决iview在vue-cli架子中字体图标丢失的方法,解决iview在vue-cli架子中字体图标丢失方法的注意事项有哪些,下面就是实战案例,一起来看一下。 字体图标丢失问题解决方案 在 build/webpack.prod…

    2025年3月8日
    200
  • vue-cli初始化一个vue.js项目的方法实例

    解析打包.vue文件 vue为了能够使我们在项目开发中对组件进行更好的维护,提供了一个单文件组件系统,vue把每一个独立的组件放在一个.vue的文件中,在这个文件中提供基础三个自定义标签:1. template2. script3. sty…

    编程技术 2025年3月8日
    200
  • JS怎么改变当前页面的颜色

    这次给大家带来JS怎么改变当前页面的颜色,JS改变当前页面颜色的注意事项有哪些,下面就是实战案例,一起来看一下。 我们先来看下具体的演示效果图 以下就是完整的HTML页面代码,大家可以测试下。 Document .big_box{ widt…

    2025年3月8日
    200
  • vue-cli脚手架初始化如何使用

    这次给大家带来vue-cli脚手架初始化如何使用,使用vue-cli脚手架的注意事项有哪些,下面就是实战案例,一起来看一下。 vue-cli是Vue 提供的一个官方命令行工具,可用于快速搭建大型单页应用。该工具提供开箱即用的构建工具配置,带…

    2025年3月8日 编程技术
    200
  • Vue-cli项目如何获取本地的json文件

    这次给大家带来Vue-cli项目如何获取本地的json文件,Vue-cli项目获取本地的json文件的注意事项有哪些,下面就是实战案例,一起来看一下。 在自己做的vue demo项目中,我想通过在本地添加一些json数据,写到json文件中…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论