Skip to content

Instantly share code, notes, and snippets.

@qiulang
qiulang / gitsubtree.md
Last active March 13, 2018 02:24
git subtree 使用总结

使用subtree初衷

  1. 原有项目只有一个repo,每个子目录对应一个子项目
  2. 子项目越来越复杂,把他们从原repo拆分出来,独立成一个自己repo
  3. 每个子项目还能以某种出现在主项目的子目录,方便主项目统一管理
  4. 对于拆分,通过调查发现有 git filter-branch 和 git subtree split -P
  5. 对于子项目管理有 git subtree add -P 和 git submodules, 网上都说submodules问题很多,还是用subtree好 ,当然我们没有submodules 使用经验,不知道问题在哪。
  6. 但是subtree 同时可以完成两个任务,所以是我们首选工具,并做了仔细调查研究

拆分用哪个命令好,到底有什么不同

  1. git filter-branch vs git subtree split,到底什么不同,用哪个好
@qiulang
qiulang / npm_module_private.md
Created March 13, 2018 05:32
如何维护私有npm module并方便安装
  1. 首先一个repo维护所有我们自己做了修改了npm 包

  2. 目前只有几个包,比如per-env, 因为per-env在window下有个很土bug,造成跑不起来

    1. per-env是个很值得研究包,首先它是一个可执行程序,我们只是运行它,而不是在代码引用它。所以所有人都要全局安装它 npm -i -g ,有了它可以方便在运行时候配置各种环境变量。
    2. 我们node程序都要npm启动,而不要用node启动,因为有很多环境变量要配置。关于node读取环境变量问题,有兴趣可以查看这个SO讨论,以及 The 12 factor
    3. node包如何变成一个可执行程序,参见 https://docs.npmjs.com/files/package.json#bin,#!/usr/bin/env node 放在代码第一行
    4. 总之per-env源代码一定要读
    5. git-directory-deploy 是另一个维护包,我们暂时不会改代码,只是要精读它的代码(参见下面描述)
  3. 一个repo维护多个包带来问题就是如何安装? npm本身支持从私有仓库安装包,但它要求一个仓库对应一个包 https://docs.npmjs.com/files/package.json#urls-as-dependencies

  4. 安装一个repo子目录下包是常见需求, 但是...

@qiulang
qiulang / using_CDN_China.md
Created March 21, 2018 04:01
如何在项目开发中使用CDN
  1. 前端代码用到的第三库发布时候使用CDN;但为了方便开发,开发阶段使用本地库。
  2. 大致比较国内可用CDN,两个可选:
    1. http://www.bootcdn.cn/ bootscrap
    2. http://jscdn.upai.com/ 又拍云
    3. https://segmentfault.com/a/1190000000311560 segmentfault.com同样用又拍云的CDN
  3. gulp和webpack分别有这样插件,让开发时候使用本地库,发布时候使用CDN
    1. webpack-cdn-plugin 传prodUrl参数设置CDN,具体参见webpack.spec.js测试用例, 实现细节看参见 webpack externals
    2. gulp-cndizer
@qiulang
qiulang / node6to8.md
Last active April 30, 2019 08:00
从nodejs 6 到 8, from callback hell to promise chain to async/await

过去一年里我把node 6升级到 8 (开发环境下甚至鼓励大家用最新的node 10),一个主要目的就是为了解决callback hell的问题.

回调地狱的问题我不是第一次碰到,在做iOS开发时候,使用AFN就有这个“Pyramid of doom”的问题,当时的解决办法,也是后来用swift要求大家尽量用guard,说白了就是early return 但这个方法对nodejs的回调地狱不适用(用命名函数可以部分解决)

刚开始接触node,对promise还不熟悉,为了解决callback hell 首先引入的是 async这个模块 但是用async总感觉不是很自然, boilerplate code也不少。另,没有用其他的库,比如thenjs原因很简单:<1> 它的star数量和async不能比,这是我选开源库一个最重要参考 <2>知道以后肯定会用promise,不想再引入一个“似是而非”的then

promise chain是在熟悉了node之后很自然会引入的第二个解决方案,关于promise chain这篇文章 We have a problem with promises 一定要读透。

MDN对promise的讲解也很到位、全面。如果还觉得不够,那就看看javascript.info的几篇文章promise async/await, rethrow

@qiulang
qiulang / pm2+socket.io.md
Last active June 4, 2018 06:56
pm2 cluster mode and socket.io

如何让pm2集群设置和socket.io 配合工作不是一件简单的事。 在SO提了这个这个问题没有答复,但我自己总结些东西。简单的说就是要么强制使用websocket要么不要用sticky session.

阿里云的负载均衡器还需配置会话保持

但因为我们使用了websocket,所以容器编排没有配置stick session

我们通过https://testable.io/ 做了socket.io的压力测试

@qiulang
qiulang / 发布一个es6的npm包.md
Last active August 2, 2018 14:32
发布一个es6的npm包,只用在最新浏览器

发布一个es6的npm包,只用在最新浏览器

所有用到es6特性,我们都确认浏览器支持, 所以觉得把包转成es5是不必要的,但在实际使用中还是发现不转es5有不少坑。

mocha的问题

首先,mocha还不支持es6,所以为了能跑 mocha 测试用例就需要babel转码。

写测试代码两个目的:检验代码正确性;示范正确调用方式

@qiulang
qiulang / 为web应用搭建CI服务器的一点经验.md
Created September 17, 2018 11:49
为web应用搭建CI服务器的一点经验

为web应用搭建CI服务器的一点经验

为我们的web app 开发搭建CI服务器以前一直欠缺两个必要条件:

  1. 好用UI测试工具。如果只是编译、打包(甚至单元测试),个人感觉完全没有搭建CI服务器必要,投入产出不成比例,每个人在自己机器跑npm script就好了。
  2. 搭建CI服务器的学习、维护成本。比如,让我们的人从头开始搭建JenkinsTravis CI 成本都太高了!

最近一段时间开发,上述两个问题都有很不错解决方案,我们的"CI服务器"终于也搭建完成:

首先, katalon 确实能胜任 UI的自动化测试(它应该是目前市面上能找到最好用的工具)。编写katalon测试用例需要投入一定时间和精力,但这部分的投入还是值得。

@qiulang
qiulang / 不同分词器在elastic中的实际效果.md
Last active October 31, 2022 10:10
不同分词器在elastic中的实际效果