如何优雅的使用vue+Dcloud(Hbuild)开发混合app

最近在做混合app,前端框架用的是vue,打包app使用的是Dcloud,不过在开发过程中有一点不爽的是,如果想使用Dcloud提供的plus这个环境变量,难倒每次都得使用npm run build先把vue打包,然后再用Hbuild打开dist文件夹,然后再手机上运行查看鲜果吗?

显然这样做让人很不爽,根本没有开发效率可谈。那么应该怎么办呢?

Hybrid App技术解析 -- 原理篇

如果npm run dev也能想build那样生成需要的静态文件该多好

是的,我们知道npm run build会生成一个dist文件夹,里面就是最终生成的静态资源(js、css、index.html、图片等),而我们最后要打包的就是这一部分代码。

而npm run dev是不会生成dist文件夹以及那些静态文件的,也就是说dev没有生成物理文件,而是放在了内存中,我们是没有办法拿到这些静态文件的。

现在我们需要的就是在运行dev的时候也生成物理文件,该怎么实现呢?

webpack-dev-middleware-hard-disk插件

这里感谢Kees Kluskens大神提供了这个插件,我们可以利用这个插件在运行dev的时候生成物理文件。

首先现在项目中安装一下该插件,npm i --save-dev webpack-dev-middleware-hard-disk。然后只需要在项目build/webpack.dev.conf.js中添加下面这段代码:


var compiler = webpack(devWebpackConfig) var devMiddleware = require('webpack-dev-middleware-hard-disk')(compiler, {
publicPath: devWebpackConfig.output.publicPath,
quiet: true
})

这样就会在项目中生成dist文件夹,里面有一个app.js,而且如果修改代码保存会自动更新app.js。注意这里不会像build那样生成index.html,不过问题也不大,只需要把项目根目录下的index.html复制到dist文件夹下,然后把app.js引入index.html,代码如下:


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>app</title>
</head>
<body>
<div id="app">
<script src="app.js"></script>
</div>
</body>
</html>

但是如果只配置这一个地方,只会在dist生成app.js,如果项目比较大,app.js的体积会比较大,如果我们还想像build那样生成vendor.js和manifest.js(app.js、vendor.js、manifest.js的区别这里不做过多解释),还需要继续在build/webpack.dev.conf.js文件里面的plugins添加下面代码:


new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks (module) {
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}), new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
minChunks: Infinity
}), new webpack.optimize.CommonsChunkPlugin({
name: 'app',
async: 'vendor-async',
children: true,
minChunks: 3
}),

这样就会在dist文件夹下生成三个文件,app.js,manifest.js,vendor.js,由于还是运行在dev环境下,dev环境默认开了热更新,所以这三个文件也是热更新的。

然后在index.html中引入分别引入这三个文件,引入顺序为manifest.js > verdor.js > aoo.js 代码如下:


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>app</title>
</head>
<body>
<div id="app">
<script src="manifest.js"></script>
<script src="vendor.js"></script>
<script src="app.js"></script>
</div>
</body>
</html>

到此dist文件夹就处理完了,dist目录截图:

在Hbuild中运行

然后就是把上面生成的dist文件夹再Hbuild中打开,首先打开Hbuild开发工具,然后依次 文件>打开目录 选择dist文件夹,然后我们需要吧dist文件夹转换成app项目:

这样就会在dist目录添加一个manifest.json文件,这样就成功转为了一个app项目:

用数据线把手机插入电脑(打开开发者调试模式),然后再Hbuild中依次 运行>手机运行> 选择你的手机 :

然后稍等一会,就会在手机上运行看到效果。这时如果打开vue项目进行开发,比如修改了app.vue,只需要Ctrl+s保存一下app.vue,就会在手机上看到更改后的效果。

原文地址:https://segmentfault.com/a/1190000014966243

如何优雅的使用vue+Dcloud(Hbuild)开发混合app的更多相关文章

  1. ionic3+angular4开发混合app 之自定义组件

    这里主要是记录ionic3+angular4开发混合app时自定义组件,我想自定义组件的方法和angular4应该类似,具体在纯angular4中自定义组件,暂时没有实践,个人觉得差别不大,之后实践了 ...

  2. 使用Webpack+Gulp开发运行于Dcloud平台HTML5+引擎的混合APP项目经验分享

    什么是5+Runtime? 首先简单介绍一下5+Runtime: HTML5 Plus Runtime(5+Rumtime)是由Dcloud开发的一套"增强版的手机浏览器引擎",与 ...

  3. 如何优雅的使用vue+vux开发app -03

    如何优雅的使用vue+vux开发app -03 还是一个错误的示范,但是离优雅差的不远了... <!DOCTYPE html> <html> <head> < ...

  4. 如何优雅的使用vue+vux开发app -02

    如何优雅的使用vue+vux开发app -02 很明显这又是一个错误的示范,请勿模仿 使用动态组件实现保留状态的路由 <!DOCTYPE html> <html> <he ...

  5. 如何优雅的使用vue+vux开发app -01

    如何优雅的使用vue+vux开发app -01 很明显下面是个错误的示范: <!DOCTYPE html> <html> <head> <title>v ...

  6. windows环境下搭建vue+webpack的开发环境

    前段时间一直在断断续续的看vue的官方文档,后来就慢慢的学习搭建vue的开发环境,已经有将近两周了,每到最后一步的时候就会报错,搞的我好郁闷,搁置了好几天,今天又接着搞vue的开发环境,终于成功了.我 ...

  7. 用vue开发一个app(3,三天的成果)

    前言 一个vue的demo 源码说明 项目目录说明 . |-- config // 项目开发环境配置 | |-- index.js // 项目打包部署配置 |-- src // 源码目录 | |-- ...

  8. 用vue开发一个app(4,一个久等了的文章)H5直播平台登录注册(1)

    我上一篇关于vue的文章和这一篇时间隔了有点久了.最近终于写完了. 因为我一直想写个有点实绩的东西,而不是随便写一个教程一样东西.结合最近在项目中学到的经验和我的一点创意. 首先介绍下这是个什么! H ...

  9. vue-calendar 基于 vue 2.0 开发的轻量,高性能日历组件

    vue-calendar-component 基于 vue 2.0 开发的轻量,高性能日历组件 占用内存小,性能好,样式好看,可扩展性强 原生 js 开发,没引入第三方库 Why Github 上很多 ...

随机推荐

  1. tyvj 1666 城市建设【最小生成树】

    -Wall是个好东西,要不然我至死都看不出来我把(b[i]+b[j])写成了(b[i],b[j])-- 还是来自lyd的题解: (其实原来课件第一行式子写错了没有-1,然而我用sai手画了一个上去hh ...

  2. bzoj 4481: [Jsoi2015]非诚勿扰【期望+树状数组】

    首先很容易计算对于一个如意郎君列表里有x个男性的女性,编号排第i位的男性被选的概率是 \[ p*(1-p)^{i-1}+p*(1-p)^{i-1+n}+p*(1-p)^{i-1+n}+- \] \[ ...

  3. P5068 [Ynoi2015]我回来了

    传送门 解锁成就:ynoi的题目都做到过原题 因为\(n\)很小,我们可以用\(sss[u][i]\)表示到点\(u\)的距离不超过\(i\)的点的集合,这个可以用bitset存,然后先一遍bfs,再 ...

  4. 极简版OKEX比特币跨期对冲策略

    策略特点 只做正套,反套可以修改下,合约调换一下,即是反套. 添加两个 交易所对象,第一个季度,第二个当周. 精简了所有能简化的代码,优化空间还很大,教学策略谨慎实盘,跨期有一定风险. 欢迎反馈BUG ...

  5. 状压dp之二之三 炮兵阵地/玉米田 By cellur925

    一.简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ ...

  6. 进击的Python【第十五章】:Web前端基础之DOM

    进击的Python[第十五章]:Web前端基础之DOM 简介:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示 ...

  7. java的构造方法 this 重载

    this1.隐含的局部变量在方法中指向调用该方法的对象()使用:当成员变量与局部变量同名的时候,通过this说明哪一个是成员变量.(this指向的是成员变量) 2.作为当前类的构造方法名存在作用:在构 ...

  8. 【学习笔记】SIFT尺度不变特征 (配合UCF-CRCV课程视频)

    SIFT尺度不变特征 D. Lowe. Distinctive image features from scale-invariant key points, IJCV 2004 -Lecture 0 ...

  9. 208 Implement Trie (Prefix Tree) 字典树(前缀树)

    实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个方法.注意:你可以假设所有的输入都是小写字母 a-z.详见:https://leetcode.co ...

  10. C/C++ 各进制赋值、int/char转换、sscanf/sprintf、位操作运算

    一.各进制赋值 1.十六进制赋值 int i=0x12AD; int i=0X12AD; int i=0x12Ad; int i=0X12Ad; //以上都是十六进制,表示十进制173: 2.八进制赋 ...