当前位置: 首页 > news >正文

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

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

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

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

如果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目录截图:

clipboard.png

在Hbuild中运行

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

clipboard.png

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

clipboard.png

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

clipboard.png

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

相关文章:

  • 深入理解linux系统下proc文件系统内容
  • Servlet容器启动过程
  • 序列化有关内容
  • 30亿元收购比特币公司 鲁亿通称不是炒概念
  • [译] android应用开发者,你们真的了解Activity的生命周期吗?
  • 分布式系统的经典基础理论
  • 如何在工作中学习
  • 实现自动SSH连接
  • 以太坊教程:搭建环境、编写编译一个智能合约
  • 微信小程序第三方开发需要注意的点
  • SSH配置免秘钥登录
  • 【VS】使用vs2017自带的诊断工具(Diagnostic Tools)诊断程序的内存问题
  • 浅谈Golang中select的用法
  • Ubantu 更新时间方法
  • [xdoj] 13011302 数字计数 数字计数的复仇
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • HTTP 简介
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • oschina
  • Python学习之路13-记分
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 聚类分析——Kmeans
  • 通过npm或yarn自动生成vue组件
  • 网页视频流m3u8/ts视频下载
  • 译有关态射的一切
  • 《天龙八部3D》Unity技术方案揭秘
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 如何用纯 CSS 创作一个货车 loader
  • #NOIP 2014# day.2 T2 寻找道路
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (算法)求1到1亿间的质数或素数
  • .NET CORE Aws S3 使用
  • .NET Core 中插件式开发实现
  • .NET Framework杂记
  • .net web项目 调用webService
  • .Net 代码性能 - (1)
  • .net 发送邮件
  • .NET框架
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .NET委托:一个关于C#的睡前故事
  • .NET学习教程二——.net基础定义+VS常用设置
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [2]十道算法题【Java实现】
  • [4.9福建四校联考]
  • [Angular] 笔记 18:Angular Router
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [CentOs7]图形界面
  • [js] 正则表达式
  • [leetcode 双指针]
  • [Linux] Linux入门必备的基本指令(不全你打我)