ESM(ES6 Module) 的前世今生

17天前
翻看很多第三方库的代码,会发现有一些库的 package.json 中有个 module 字段: { "name": "vue", "version": "2.5.17", "main": "dist/vue.runtime.common.js", ...
Javascript 99 2 0

微信小程序与微信小游戏

9个月前
最近在折腾使用 cocos creator 开发运营类小游戏,这确实是一款很棒的游戏开发软件,集成了整套的开发调试工具与跨平台编译支持,目前支持编译到绝大多数平台,甚至最近几年比较火的各种小游戏平台,一些经典游戏如《保卫萝卜》、《开心消消乐》等都是用此工具开发 (微信官方欢乐斗地主小游戏是用 cocos2d-js 开发) ,还是比较靠谱的。 由于我们的需求场景主要在微信平台,所以重点使用了其编译至...
Javascript 486 0 0

微信封禁链接小结

1年1个月前
大概在今年 6·18 的前几天,我们发现分享至好友和朋友圈的营销活动链接被频繁封禁: 经过大量被封禁链接的规律分析发现,目前微信封禁的是初次访问的 url 中的 path 部分,改变 path 即可临时解封。(如果页面有二次跳转,那么微信封禁的会是跳转前的 url 地址) 但改变 path 成本很高,需要服务端有对应的内容与之响应,通常的手段要么是 nginx 配置虚拟路径,要么是前端复制...
Javascript 967 7 0

Nodejs 中的流式下载解压与流式压缩上传

1年1个月前
我们的构建工具中有下载和上传的功能,分别是在创建项目和发布代码到测试环境的时候,最开始为了偷懒都是先 下载/打包 成临时压缩包,然后 解压/上传 这个临时压缩包 后来觉得先写个文件到磁盘,再 解压/上传 这个文件有点傻,因为 解压/上传 完毕还要再删掉它,并且即使捕获了程序异常退出、上传失败、网络不通等等异常还是会因为一些原因删不掉,比如突然断电、程序异常崩溃等 倒是有个猥琐的手段,写到一...
Javascript 1637 1 0

BFCache 与 SPA单页面应用前进后退导致白屏

1年2个月前
什么是BFCache back-forward cache, 为浏览器前进/后退时准备的缓存 官方解释提到了 nsIDOMWindow ,那什么是 nsIDOMWindow 呢? 它是 Gecko 内核标准下的一个 interface, 它主要描述了一个承载了 Document Object Model(DOM)的容器,也就是我们常用的 window 根对象。 与之很像的还有一个叫做 ns...
Javascript 1651 3 0

buffer 上传中遇到的问题

1年3个月前
最近在做的这个构建工具中,有个打包上传的功能,共分为两步: 使用 archiver 将文件打包成 zip 格式文件包 将 zip 包上传至指定地址 第一步最开始的时候做成了先本地生成一个临时文件,然后使用 request 模块上传: // 简单代码,未做任何异常捕获和处理 const archiver = require('archiver'); const r...
Nodejs 1507 3 0

package-lock 和 npm-shrinkwrap

1年7个月前
最近半年都在做一个团队内部的构建工具(以下简称CLI),目的是统一管理构建环境的版本,构建环境出了问题或者需要升级的时候统一解决。 既然是想统一版本,那肯定希望每个人安装到本地的CLI所依赖的node_modules版本都是一致的,我们用的node版本是v8.12.0(npm@6.4.1),正好会自动生成package-lock.json(从npm@5.0.0开始),想当然的以为它的存在会锁定每个...
Javascript 1187 1 0

开发无感知的webp升级方案

1年8个月前
webp最早由Google收购的On2 Technologies于2010年9月底提出,2014年初发布的Chrome@32和稍早发布的Android Browser@4.2完全支持了webp的所有特性,包括有损压缩、无损压缩、动态图等,然而直到现在Apple生态还是完全不支持webp,包括iOS Safari和pc Safari。虽然如此,我相信终有一天它会被广泛接受,毕竟无损压缩可以减少普通p...
Javascript 1737 3 0

微信小程序web-view组件的坑

1年8个月前
最近在做一个活动时候,需要将H5页面嵌入别人家的小程序中,正常微信环境中我们会通过在分享链接拼接参数的方式,来获取微信用户的分享关系,然而在小程序中分享的地址是小程序自己的path,其他用户点击的时候会直接进入小程序的这个path,所以H5就不能直接获取到用户的分享关系了。 那么怎么实现呢?思路是挺简单的: H5将需要拼接在分享链接上的参数,通过wx.miniProgram.postMe...
Javascript 1700 5 0

页面禁止滚动

1年12个月前
最近做了个图表的东西,图表上有拖拽的交互,在拖拽的时候不小心就会拖动到页面,为了避免这个交互带来的影响,很自然的我们想到了阻止页面滚动常用的伎俩: document.body.addEventListener('touchmove', e => { e.preventDefault(); }, false); 打开页面发现,好像并没有生效,并且报了这么个错误: ...
Javascript 1260 0 0

webpack4 抽离公共css产生的问题

2年前
webpack4对css的默认处理是同步引用的[s]css合并成一个文件,其他异步引用的分别单独打成独立文件,但是在[s]css文件中使用@import引用的公共模块并不会被抽离出来合并到同步引用的[s]css合并成的文件中,这导致引用了大量的重复代码,可以看看sass-loader其中一个issue对此问题的讨论并且我们希望同步引用的[s]css文件最终打包成两个css,一个是通用的common...
Javascript 2230 0 0

http请求被307到https

2年前
问题复现 先访问https://a.com, 该网页JS会请求https://api.a.com接口 再访问http://a.com, 该网页JS会请求http://api.a.com,但是查看网络请求发现,http://api.a.com被强制307到了https://api.a.com 经过排查发现,这是命中了浏览器的HSTS策略,即: 一切能通过https访问的网址,都用htt...
Javascript 3325 1 0

对peerDependencies的理解

2年6个月前
最近在搞webpack@4.x的时候,安装各种插件后总是会出现UNMET PEER DEPENDENCY这个东西,它到底是个什么错误呢?在通读了Domenic Denicola的这篇文章后,才有了个大致的理解。 我们还记得刚接触node(node<5.0, npm<3.0)的时候,依赖是层层安装的,比如某个项目同时依赖了a和b,a和b又同时依赖了c,那么项目的结构会是这样的:|--a-...
Nodejs 10837 4 0

迟迟未到的babel-preset-env@2

2年7个月前
从babel-preset-env之前官方github的release列表中可以看到,距离可追溯的第一个2.0的alpha版本v2.0.0-alpha.4 (2017-04-07)已经过去了382天,在经历了几十个alpha版本和几个beta版本后版本号变成了7.0.0-beta.3,与之对应的babel-core也接连发布了多个7.0.0的alpha和beta版本,目前也已经到了7.0.0-be...
Javascript 1580 0 0

再谈webpack-dev-server之proxy

2年7个月前
今天在折腾proxy代理的时候,遇到了这么个需求:只匹配不包含/js/的路径,然后理所当然的认为proxy的路径应该是支持正则匹配的,不匹配某个特定组合的字符需要用到零宽度负预测先行断言(?!exp):^(?!.*\/js\/).*$ 然而并没有起任何作用,似乎并没有匹配到任何路径。查遍了官方文档也没有找到可以打印代理日志的方法,只能去webpack-dev-server的代码里打断点来调试了。然...
Javascript 7453 3 0

webpack-dev-server编译文件写入磁盘

2年7个月前
了解webpack-dev-server的同学们都知道,启用它之后编译生成的文件是存在内存里不落磁盘的,但如果我就是想落磁盘应该怎么操作呢? 先来看看webpack官方是怎么回复这个问题的:#issue62,先是让用webpack --watch来解决,然后质疑了为什么会有这种需求,再然后另外一位Contributor回答说假如你监听的端口是9000,那么可以访问http://localhost:...
Javascript 4593 3 0

npm Wanted vs Latest

2年8个月前
今天在使用vue-cli的时候报了更新提示,于是直接npm update vue-cli -g,发现并没有任何作用,使用更暴力的npm update vue-cli -g --force依然没有作用。看了官方提示后执行了npm update vue-cli -dd来显示更新过程中的细节,发现有这么一句: outdated not updating vue-cli because it'...
Nodejs 2001 0 0

编辑网易邮箱签名的奇幻之旅

2年8个月前
今天有个同事接到了编辑邮箱签名的需求,但是遇到了个问题:编辑的好好的,保存后签名预览也没问题,可邮件发出去签名图片就是不显示。 为了测试这个问题,我们先来打开网易邮箱,找到:设置->邮箱设置->签名/电子签名,看到有两个按钮,新建文本签名、新建名片签名,由于该需求定制化程度很高,用名片签名是满足不了的,所以只能新建文本签名了。 既然是文本签名为啥又能插入图片了呢?点开后弹出的新建签名窗...
心路历程 1217 0 0

腾讯云centos7安装gitlab及数据迁移

2年8个月前
前几天花360元撸了4年1核2G腾讯云,最近打算把原来阿里云上的gitlab迁过去,主要原因是这东西开起来就吃掉1G内存,当初为了能装这个玩意还升配了阿里云,花了不少银子。 当初阿里云怎么装的gitlab都有点忘干净了,只记得这玩意好像内置了nginx,搞不好会和之前安装的nginx有冲突。这次重新装正好可以记录下过程。 打开gitlab官网,选择自己的linux版本,然后按照提示一步步的进行即可...
Javascript 2245 2 0

React 服务端渲染

2年8个月前
写了这么多年博客,本来就没几篇,被百度收录的更是少之又少,可能因为之前大部分时间都是为了追求页面效果而使用了前端模板,导致百度蜘蛛过来的时候没有东西可爬吧。所以最近打算搞成前端+服务端共同渲染,实现用户手点页面的时候在前端跳转,直接请求页面则由服务端直接返回拼装好的页面。本篇主要记录使用react服务端渲染来实现这个需求所以到的几个问题,所使用的react版本为15.5.4。 1.首先遇到的问题是...
Javascript 2107 0 0
灌水
    查看所有还可输入70个字