LK

Results 22 issues of LK

### 从 npm audit 说起 今天尝试用 `npm audit` 在项目里跑了一下,发现了很多类似下面的错误: > 如果你还不清楚 `npm audit` 是做什么的,可以参考[官方文档](https://docs.npmjs.com/cli/audit)。简单来说 `npm audit` 会对项目的依赖包进行安全扫描,并且列出存在的可能遭受攻击的安全隐患,比如上面截图中的信息就是一个潜在的被攻击点。 ### Regular Expression Denial of Service (ReDoS) 图片第一行显示的 `Regular Expression Denial of Service`...

随笔

> 并不逐字翻译,原文请点[这里](https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process)。 ### 介绍 SSH (安全 shell),是一个安全协议,同时也是安全地管理远程服务器时用的最多的方法。它提供了一种能够在客户端和服务器端建立安全传输和验证,以及执行远程命令的方法,而这里面使用了多种加密技术。 这篇文章我们会学习 SSH 使用的底层的加密技术以及其用于建立安全连接的具体方法,这些知识会对你理解不同层的加密和双方建立连接到验证所需的不同步骤有所帮助。 ### 对称加密、非对称加密和哈希 (Hashes,散列) 为了确保信息的安全传输,SSH 在事物中的多个地方采用了多种不同类型的数据操纵技术,包括对称加密,非对称加密以及哈希。 ### 对称加密 加密和解密数据所用的组件之间的关系可以确定当前加密方法是对成加密还是非对成加密,简单来说就是,如果一个密钥能够同时加密和解密数据,那么它就是对称加密。这也意味着任何持有这个密钥的人都能解密由这个密钥加密的数据。 对称加密通常被称为"共享密钥"或者"私有密钥"加密,典型的情况就是**一个**密钥负责所有的操作,或者**一对**密钥,但是这一对密钥的关系很简单,通常能根据其中一个轻易地推出另一个。 对成加密被 SSH 用来加密整个连接。和很多人想的不一样,非对称加密中的公/私钥匙对只是用来验证,而不是用来加密连接的。对称加密甚至能够防止密码认证阶段的数据被偷窥。 建立这个密钥需要客户端和服务器端同时工作,并且生成的密钥是不能让外部知道的。密钥通过称为密钥交换算法的过程创建,此算法可以让客户端和服务器端各自利用一些私有的数据和一些共享的公开的数据就能计算出一样的密钥,这个过程后面会详细说明。 由此过程创建的对称加密密钥是基于会话 (session-based) 的,并且服务器端和客户端实际通信就是用的这个密钥加密,所以一旦建立连接,剩下的所有数据传输都必须用这个共享密钥加密。这一步是在认证客户端之前完成的。 SSH 可以配置使用多种不同的对称加密算法,包括 AES, Blowfish,...

翻译

> 并不逐字翻译,原文请点[这里](http://americanexpress.io/clean-code-dirty-code/) 这篇文章主要关注如何编写整洁的代码,以及 ES2015 所带来的一些语法糖是如何帮助我们更容易的实现这一点的。 ### 什么才是整洁的代码?为什么我需要关注它? 整洁的代码,说白了就是风格统一的,编写、阅读、维护起来都非常轻松的代码。所以仅仅能够正常工作的代码并不就是整洁的代码。 当你阅读这篇文章的时候就是一个清理“死”代码(dead code)的好机会。你可以重构、删除被注释掉的代码,这一切都是为了更好的维护性。写代码的时候我们就应该想着:我这么写,六个月之后其他人甚至是我自己能看得懂吗?简而言之,整洁的代码就是你写完后可以很自豪的拿回家展示给你妈看的代码。 作为一个优秀的开发者来说,写整洁的代码是自然而然必须要掌握的东西。 ### 整洁的代码看起来就很舒服 如果一段代码给人的感觉是:“总觉得哪里不对啊”,那么很有可能这段代码的的确确确确实实实实在在是有问题的。好的想法经常会一起出现,不好的也是。所以当你觉得目前正在做的事情就像是要把一个正方形的塞子拼命填进一个圆形的孔里的时候,停下来歇一会,退一步想是不是不应该这么做。90% 的可能你会想出来一个更好的解决办法。(Nine times out of 10, you’ll come up with a better solution) ### 避免重复 如果你发现有一些类似的代码散落在各个地方,那么考虑提取出一个公共的模式。 ```jsx...

翻译

Nicholas C. Zakas 的一篇博客,[原文点这里](https://www.nczonline.net/blog/2016/04/es6-module-loading-more-complicated-than-you-think/)。 ECMAScript 6 中最让人期待已久的特性之一就是模块化正式成为语言的一部分。多年来,`JavaScript` 开发者一直在如何组织他们的代码上挣扎着,以及如何选择 `RequireJS`, `AMD` 或者 `CommonJS` 来开发。模块化的正式定稿将会在未来完全消除这个问题,但现在,还存在很多关于模块化是如何工作的疑问。这些疑问存在的部分原因是目前还没有引擎能原生加载 `ES6` 模块,所以我希望这篇文章能澄清一些疑问。 ### 什么是模块 (module)? 首先需要明白规范定义了两种 JavaScript 程序存在的形式: `script` 标签 (自 `JavaScript` 诞生开始我们就一直在用的) 和 `ES6` 的模块 (...

翻译

### 前言 > Web Component 可以看作是一种为了重用界面组件的基于浏览器的技术方案。 > 主要由Shadow DOM、Tempaltes 标签、自定义元素、HTML 导入(Imports) 这四部分标准组成, > 但是要注意这四个标准每个都可单独使用,不一定结合在一起,但是就跟葫芦娃一样只有组合一起使用才能发挥出最大的效果,Web Component。 > 这篇文章先分别介绍四个标准,然后组合一起实现一个 Web Component 的完整例子,快上车。 ### Shadow DOM 或多或少在工作当中会有这样的体验: * 我们在给元素起 `id` 名时总要小心翼翼的,生怕一不留神就重复了,导致一些难以追踪的问题出现。 * 给元素起...

布道

一篇简单的介绍 Immutable.js 的文章,原文[在这](http://www.zsoltnagy.eu/introduction-to-immutable-js/)。 许多开发者在处理函数式编程的时候强调数据的不可变性。函数式代码是可测试的,这是因为函数在处理数据的时候把其当成不可变的。但是在实际操作中我经常看到这个原则被打破。下面我会展示一种能从你代码中完全消除这种副作用的方法: 使用 [immutable.js](https://github.com/facebook/immutable-js)。 ### 救星 Immutable.js 通过 npm 安装或者直接引入源文件 [immutable.min.js](https://github.com/facebook/immutable-js/blob/master/dist/immutable.min.js) 就可以直接使用它。 我们的第一个例子来探索一下 immutable 的 map 数据类型。map 基本上就是一个包含键值对的对象。 ``` javascript var person = Immutable.Map({ name: 'John', birth: 594687600000,...

翻译

> 并不逐字翻译,原文请点[这里](https://blog.yld.io/2016/01/13/using-streams/#.WE-7v3dY7fY)。 ### 可读数据流 这篇文章会继续讲述如何建造我们的家用自动监控系统。 在我们的系统里有一个温度计,它会频繁的发出温度数据,就好像是一个数据水龙头一样,而这在 Node.js 里通常被称为可读数据流。 我们可以这样监听温度计发出的数据: ```javascript var thermometer = home.rooms.living_room.thermometer; thermometer.on('data', function(temperature) { console.log('Living room temperature is: %d C', temperature); }); ``` 你可以看到可读数据流其实是事件发射器(event emitter)的一个特例,当有可用数据的时候不断发出 `data` 事件...

翻译

刚刚无意之中在网上看到 `web worker` 这个词,瞬间跌入了回忆的深渊,什么 `serviceWorker`、`walking dead`、亲爱的长者 乱七八糟一齐涌了出来,就是没有 `web worker`,最后颓废的发现,原来关于 `worker` 相关的东西自己已经忘干净了。 不过隐约记得这东西用起来不很复杂,于是果断上 MDN 看看文档,但是又无意中看到 `MessageChannel` 这个词,很明显幼小的心灵又被一个陌生的词汇狠狠的鞭笞了一下。忍不住点进去看了一下关于 `MessageChannel` 的资料,发现这行代码 ([来源](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel/MessageChannel)): ``` javascript otherWindow.postMessage('Hello from the main page!', '*', [channel.port2]); ``` 蛤?原来...

随笔

前两天因为某个功能写了这么一段代码: ``` javascript /*...*/ var parseStr = function(str) { if (str != null && (typeof str['split'] === 'function')) { var _t1 = str.split(','), i, _t2; for (i = 0; i...

随笔

## Current Behavior I'm using `@nrwl/web:rollup` to build my react library, and I my target is only for last 2 Chrome versions. So I add a `browserslist` field in the...

type: bug
scope: react