0%

Caddy2

THE ULTIMATE SERVER

Caddy 2 is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go

Read more »

最近用到用云主机来做应用的自动发布处理。
就是那种当你提交了代码到代码库后,自动跑CI,然后自动发布到服务器上去,一切都是自动运行。

Read more »

Docker 底层是跑在 Linux 基础上的,但是我们开发的电脑常用 Apple Mac,
如果想在 OSX 上跑 Docker 的话,一般使用 Virtual Box 或者 VMware 来运行一个VM。
因为这层软件也不是原生的,相当于多加了一层,
开启一个 VM 常常很耗时,运行在上面的应用的性能并不好。

常常让人觉得 Docker 对 OSX 的亲和力不够。

最近才看到有一个基于 OSX 原生底层的 VM 叫做 xhyve。我尝鲜了一把,虽然遇到了一个小坑,但是克服之后用起来感觉很不错,赶紧来看看吧。

Read more »

若想在 production 上使用 Docker,必然需要使用使用私有的 Registry。
Docker 提供了一个很棒的 Registry Image, 使用他可以快速的建立自己的私有库。

Read more »

这是去年做的阅读网络小说的App【书山追更】,使用了 Cordova, Vue 开发,也迭代了不少版本。

主要是为了满足自用,爱看书的朋友可以下载来试试,无广告哦~~

仿的是【追书神器】App,使用的也是他们的免费接口。

Update(2020-09-26): 追书神器的免费接口已经不能返回小说内容,现在已经基本不能使用这个APP了。
留存以后找其他书源。

Read more »

这段时间开始做小程序的开发,所以稍微研究了下小程序的开发框架。
当下比较有名的有以下几个开发框架:

  • 基于模板的类 vue 的原生框架
  • 在原生框架上改良的仿 Vue 框架 wepy
  • 基于 Vuempvue
  • 基于 Reacttaro

另外还有几个小众的:

因为之前比较熟悉Vue,所以没有太费脑力就选了 mpvue

看了文档觉得虽然有所限制,比如:

  • 模板里不能写复制的表达式
  • 模板里不能用函数
  • 不能用 filter
  • 不能用 slot

感觉虽然有限制,但是好像没有特别大的关系。多费点代码还是能克服的。

谁知道,刚码了两个页面就遇到了坑。

  • beforeDestroy 回调基本没用
  • mounted 可能永远不会调用第二次
  • 再次进入页面时有上次状态的残影
  • 再次进入页面时取不到变化的页面路径参数
  • 使用 HTML 原有的标签名作为组件名时,自定义组件内模板不起作用
  • 错误如果不捕捉会被吞没,不报错

倒不是某个框架的问题,搜了一下其他的框架基本也都有这些问题。

还没有具体看过 mpvue 源码,但是看了前人介绍,有些是因为小程序的特色所导致的。
比如为什么页面再次打开会有之前的状态值存留。

个人感觉以下内部世界被割裂成了3个世界:

mpvue 对象 -> 小程序Page对象 -> View render

原生的 Page 里 通过 setData 把数据传输给视图进行显示,
当页面关闭后,页面对象消失,但是 mpvue 对象会重复使用,
每次页面重开时会使用之前的 mpvue 对象,造成了数据的残留。
理想状态是 Page 关闭时,销毁 mpvue 对象,打开时再重新生成。这样整个生命周期就与预期一致了。

正因为以上的原因,造成了很多意想不到的问题(keng)。

也探索了一些解决方法:

问题1:数据残留

export default {
  data () {
    return {
      a: 23
    }
  }
}

对策:onUnload里重置初始值

export default {
  data () {
    return {
      a: 23
    }
  },

  onUnload () {
    Object.assign(this.$data, this.$options.data())
  }
}

这里的 this.$optionsVue内部使用的属性,保留着初始的对象值。
可以把他写成一个Vue plugin,这样就可以省却每个页面都要写的尴尬。

问题2:computed 内获取的参数不会变化

export default {
  computed: {
    id () {
      return this.$root.$mp.query.id
    }
  }
}

对策:写入 mounted 里,赋值到 data 对象内

export default {
  data () {
    return {
      id: null
    }
  },

  mounted () {
    this.id = this.$root.$mp.query.id
  }
}

问题: 组件文件名不要使用HTML标签名

组件名用了 article, 引入时不报错,但是组件内部模板不显示,也不报错。
即使引入时改了,也还是不显示:

import Article2 from './article'

对策: 为了减少麻烦,一定要使用非HTML标签名,引入时也最好名称一致。

问题4:自定义组件时写的事件处理函数不起作用

<template lang='pug'>
  .container
    tag1(
      @click='handler'
      v-for='item in items'
      :key='item.id'
    )
</template>

对策:如果想再调用时处理事件的话,需要在自定义内部通过$emit 发出来,
自定义组件所有的事件都需要自己发射到父组件。

暂时就先记这么多,后续有再跟进。
多说一句: mpvue 是基于 Vue 2.4.1 基础上开发的,所有 2.4.1 以上的功能就不要去用了。

自从去年2017年微信开放了小游戏之后,极大的促进H5游戏的发展。可以想象今年微信游戏必定非常火。
乘着这股春风,结合近期研究的 rxjs,想尝试下用 rxjs 改写微信官方小游戏。

weixin-game

Read more »