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'
}
])
4、在src目录下添加pages文件夹
目录的层级结构安排成类似于这种形式:
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创建项目从单页面到多页面2-history模式
Vue-cli创建项目从单页面到多页面3-关于将打包后的项目文件不放在根目录下
Vue-cli创建项目从单页面到多页面4 - 本地开发服务器设置代理
本文链接:http://www.cnblogs.com/xsilence/p/7553911.html
Vue-cli创建项目从单页面到多页面的更多相关文章
- 解决@vue/cli 创建项目是安装chromedriver时失败的问题
最近在使用新版vue的命令行工具创建项目时,安装chromedriver老是失败,导致后面的步骤也没有进行.网上搜索了一下,全是使用 工作中常见问题汇总及解决方案 npm install chrome ...
- Vue CLI 创建项目
使用命令创建VUE项目 运行以下命令[vue create [项目名]]来创建一个新项目: vue create hello-world 警告 如果你在 Windows 上通过 minTTY 使用 G ...
- vue/cli创建项目过程
①vue create demo vue版本:3.9.3,node版本:12.8.0 ②Manually select features ③Bab ...
- Vue-cli创建项目从单页面到多页面2-history模式
之前讲过怎样将vue-cli创建的项目改造成多页面(vue-cli创建项目从单页面到多页面),今天说一下怎样在多页面的前提下使用history模式. 如何使用history模式 因为vue默认的has ...
- Vue-cli创建项目从单页面到多页面4 - 本地开发服务器设置代理
前后端分离开发时,有时候会遇到跨域的情况:只在开发的时候存在跨域,项目上线后,由于配置的域名相同,跨域就会不存在. 这个时候,有两种方案可以比较快的解决: 1.利用h5的特性,使用cors,在ngni ...
- Vue-cli创建项目从单页面到多页面3-关于将打包后的项目文件不放在根目录下
关于将打包后的项目文件不放在根目录下 有时候,我们总是需要这样的设置:希望将打包后的文件放在a.b.com/somepath/这样一个路径下. 然而在vue-cli创建的项目中,默认的打包路径中的静态 ...
- vue cli创建typescript项目
使用最新的Vue CLI @vue/cli创建typescript项目,使用vue -V查看当前的vue cli版本 安装命令 npm install -g @vue-cli 创建项目 vue cre ...
- 初学Vue.js,用 vue ui 创建项目会不会被鄙视
全栈的自我修养: 6使用vue ui进行vue.js环境搭建 It is only with the heart that one can see rightly. What is essential ...
- vue cli 打包项目造成css背景图路径错误
vue cli做项目的时候难免会碰到,css引用背景图或者css,js之间的相互引用!!!这时候打包后可能会出现一个错误!!如下图: 写法: 错误: 会无端多出一个“/css/static/” 这样就 ...
随机推荐
- 网络与WEB 编程
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Helvetica; color: #29556f } 作为客户端与HTTP 服务交互 问题: ...
- Velocity.js的使用
前面的话 Velocity是一款优秀的JS动画库,完全可以作为jQuery的animate的替代品.需要动画功能时,使用Velocity是一个好选择.本文将详细介绍Velocity.js的使用 概述 ...
- Struts2.5的的环境搭建及跑通流程
Struts2.5 struts是开源框架.使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间.如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,st ...
- 2017多校第9场 HDU 6161 Big binary tree 思维,类似字典树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6161 题意: 题目是给一棵完全二叉树,从上到下从左到右给每个节点标号,每个点有权值,初始权值为其标号, ...
- JS对JSON的操作总结
对于前端完全是菜鸟,迫于无奈,工作中要用到JS,尤其对JSON的处理为多,网上搜了一下,所讲的基本雷同.所以把平时用的比较多的JSON处理方法总结了一下,权当加深记忆. 一.概述 JSON(JavaS ...
- vue-cli脚手架npm相关文件解读(4)utils.js
系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...
- Markov不等式,Chebyshev不等式
在切诺夫界的证明中用到了Markov不等式,证明于此~顺便把Chebyshev不等式也写上了
- uval 6657 GCD XOR
GCD XORGiven an integer N, nd how many pairs (A; B) are there such that: gcd(A; B) = A xor B where1 ...
- webpack常见的配置总结 ---只是一些常见的配置
早期的构建工具grunt ,gulp 帮助我们配置一些开发环境,省去一些我们调试和重复的工作 现在我们的构建工具一般是webpack ,目前建议大家用3.0以上的版本 现在市场上比较优秀的构建工具,个 ...
- UWP 手绘视频创作工具技术分享系列
开篇先来说一下写这篇文章的初衷. 初到来画,通读了来画 UWP App 的代码,发现里面确实有很多比较高深的技术点,同时也是有很多问题的,扩展性,耦合,性能,功能等等.于是我们决定从头重构这个产品,做 ...