分类‘编程代码’

基于Nuxt构建动态路由SSR服务

大约两年前曾经分享过基于Vue的SSR框架Nuxt的简单使用《基于Vue.js的SSR方案之Nuxt.js》,今天因为有SSR需求又重新做了一些尝试。

由于目前在做的是一个能够动态构建页面的平台产品,当前现状是构建产物全为静态资源,路由由前端渲染,且为动态创建。也由于众所周知的原因,国内网站不做SSR基本不可能被搜索引擎收录,于是有了此文,简单记录一下结合Nuxt和Vue做的一些尝试。

查看更多...

用Monaco Editor取代Ace Editor

大概在5年前,曾分享过一篇《ACE Editor在线代码编辑器简介及使用引导》,恰巧最近我们产品上又有用到Ace Editor,看了下博客,没曾想,在五年后的今天,还有相当一部分人通过搜索引擎搜到这篇文章。不过在这次使用中,也发现了诸多不爽,主要有:不支持es6的import导入(需要二次封装);自带模块加载器和webpack打包的项目不太好结合等。所幸的是,在github上找到了现成的二次封装版本https://github.com/vue-bulma/brace(刚好我们在用Vue)。

查看更多...

基于Array的JavaScript表达式执行函数实现

最近项目涉及到表达式,简单封装了一些功能,如表达式解析、执行等,解析不用说,网上很多表达式字符串解析为词法树的库,我们也不必再造轮子(我用jsep进行解析),这里说下执行表达式的方式。

默认字符串解析抽象词法树按理说是可以直接解析执行的,只不过通常此类词法树要表达的内容过于多,数据的存储也过于庞大,于是我们结合自己业务对关键数据做了抽象,比如

查看更多...

让input maxlength区分中英文

经常有需求,在限制文本框输入长度的时候,区分中英文,如:中文(全角符号类似)占两个字节,英文则占一个,最近审查代码,发现项目上存在类似需求,组内同学实现了网上经常提到的方案,输入后替换,由于监听的是input事件,导致任何越界输入都会出现闪烁的情况,不同于原生效果。

回忆到以前曾经用keydown结合其他事件实现了一版,晚上没事,就尝试重新实现了一下,由于目前项目不考虑非webkit内核浏览器,只在chrome下简单测试了下,有兼容性问题欢迎评论告知

查看更多...

node gRPC *.proto 生成 js/ts

最近项目增加node的bff(Backends For Frontends)层,后端用了golang&gRPC。node端使用了nestjs框架,为了ts能够识别proto定义的接口,希望通过proto生成gRPC接口文件,期间绕了不少弯路,简单分享下。

首先组内同学找到这个库
https://github.com/agreatfool/grpc_tools_node_protoc_ts
按照示例,命令如下,发现不好用

查看更多...

seajs amd 改造

说起来seajs,早些年接触前端的同学应该都有所了解,经常被我们拿来和requirejs对比,而今,webpack等构建工具盛行,这些加载器的使用逐渐退出了我们的视野。

但是,目前手上就有个在用webpack的项目遇到了一些问题——不能在构建阶段拿到或者预期到即将加载的代码有哪些,换句话说页面框架的构建与业务代码是完全分离的,甚至不是同一个团队写的。于是想到了早期的模块化方案,我们知道,webpack支持打包umd、commonjs2、amd等形式的输出物,但是,在web端我们的选择只有amd。

查看更多...

golang函数究竟是值传递还是引用传递?

接上文,踩完php的坑,又遇到golang,golang和之前提到过的Java、JavaScript类似。

在golang中只存在值传递(要么是该值的副本,要么是指针的副本),不存在引用传递。之所以对于引用类型的传递可以修改原内容数据,是因为在底层默认使用该引用类型的指针进行传递,但是也是使用指针的副本,依旧是值传递。

查看更多...

php函数之值传递&引用传递

由于工作忙碌,博客已经断更整一年,最近终于抽出点时间,来分享一些近一年经历中印象深刻的经历。

大概三年前,曾经整理过这样两篇文章《JavaScript函数究竟是值传递还是引用传递?》、《Java方法究竟是值传递还是引用传递?》,不为别的,只因为在工作中有人遇到类似问题,查阅资料后加以整理。巧的是,前阵子做php的同事又造出了相似的bug,不同的是,php并不像前两者一切皆值传递。

在php的世界里,存在传值和传引用两种方式

查看更多...

使用mpvue开发小程序——vuex、router的支持

继续前面话题,mpvue提供了vue的语法编译为小程序的能力,但语法上局限实在有点多。

当然,其根因还是小程序官方的限制,以致于我们vue中常用vuex、router都支持有限,截止发文时间,mpvue对vuex全局store的支持也有所提升,目前可以说基本满足需求,这里不再赘述。

使用上,vuex和以往类似,不同的是,小程序以多页形式渲染,故每个页面都需要创建vue实例并引入相应的store模块 查看更多...

使用mpvue开发小程序——axios发送ajax请求

依托于热门的小程序,美团最近开源的mpvue一下子火了,刚好项目上有需求想试用下mpvue,发现众多限制下,连目前常用的ajax请求库axios都不能正常构建。

默认添加了axios,你可能得到如下错误

thirdScriptError 
 sdk uncaught third Error 
 util.inherits is not a function 
 TypeError: util.inherits is not a function

因为项目为开发平台,不少用户重度依赖axios,一开始建议小伙伴尝试写adapter支持小程序请求,小伙伴反馈了如上错误,并建议使用社区宣传比较火热的fly。fly其实api和axios几乎一致,但还是有差异,未防止核心库变更对平台客户带来不便,决定展开axios代码一探究竟。 查看更多...