# 064.NodeJs做个CDN的Cli
不等不靠,有囧有料。攻城狮看平衡,程序猿看利弊,码农看对错 :)
接轨js世界,写2个有关CDN的轮子,熟悉下NodeJs和npm体系。
replacer来hash资源,替换引用。uploader上传资源到CDN。
@史荣久 / 2018-07-22 / CC-BY-SA-3.0
## 观看视频
* [B站视频(效果不错)](https://www.bilibili.com/video/av27589421/)
* [腾讯视频(被转720P)](https://v.qq.com/x/page/r07316w96uo.html)
* [百度网盘(原始1080P)](https://pan.baidu.com/s/1jHcDIUmSpWIrVBhg6dJWuA)
## 内容摘要
* 如何写NodeJs的命令行工具`cli`。
* 什么是`shebang`(蛇棒 `#!`)
* nodejs,ES6的基础知识(export和require)。
* node版本号,大工程应该定死,尽量禁止自动升级。
* jshint提高代码质量,禁止一些不必要的警报。
* 使用vscode做主力编辑器比较轻量级。
* Ant模式的通配符(wildcard)和正则。
* js正则不只支持逆向环视的变通方法。
* js string.replace的多种用法。
* 递归文件(需要做短路设计,提前熔断),是必备技能。
* 使用js作为配置文件更舒服,比如正则,注释,末尾逗号等。
* 组件及其测试的考量(入口,配置,模块,测试)。
* 非语法分析的URL替换需要考虑边界(总比常见的多)。
## 参考资料
* [LINUX上的SHEBANG符号(#!)](http://smilejay.com/2012/03/linux_shebang/)
* [知乎:写一个 npm cli](https://zhuanlan.zhihu.com/p/25249117)
* [阮一峰:ECMAScript 6 入门](http://es6.ruanyifeng.com/)
* [阮一峰:require() 源码解读](http://www.ruanyifeng.com/blog/2015/05/require.html)
* [jshint配置](http://jshint.com/docs/options/#asi)
* [Node中Exports的区别](http://www.cnblogs.com/pigtail/archive/2013/01/14/2859555.html)
* [commander 命令行解析工具](https://www.npmjs.com/package/commander)
* [Node版本号](https://stackoverflow.com/questions/22343224)
* [Js正则不支持逆向环视](https://stackoverflow.com/questions/7376238/javascript-regex-look-behind-alternative)
* [AntPathMatcher](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html)
* [a9cdn-replacer,hash和替换](https://www.npmjs.com/package/a9cdn-replacer)
* [a9cdn-uploader,ssh和七牛上传](https://www.npmjs.com/package/a9cdn-uploader)
## 欢迎围观
``` java
if (you.accept(MoilionCircle.SPIRIT)) {
if(you.haveADL()){
MoilionCircle we = you.search(MoilionCircle.SLOGAN);
we.welcome(you);
}
if(you.share(this)){
We.thank(you);
We.mayFind7Moilion();
}
}
```
## 后记
2018的杭州前端人才市场浮躁,水多,大头雇主超多。
保护团队成果,必须看好招人关,就接触了下js世界,
node算后端,上手倒不难,三个小时写两个轮子。
按狮友`ANE-K`的留言建议,尝试把视频放到`B站`。
使用体验非常棒,逐渐上传过往视频.
----
题图:NPM官网:Build Amazing Things.
领取专属 10元无门槛券
私享最新 技术干货