第14期 — 2019-08-04

在浏览器中阅读

周e信

Node.js

marblejs-流处理web框架🔗

marblejs 是 nodejs 的服务端框架,使用 typescript,RxJs。 其作用类似于 expressjs 等。

Ka

semiotic-基于d3的react图表组件🔗
  • Express + mongodb + pug(express模板引擎)
  • 需要下载项目模板
  • 集成了多个api 服务

    老编想说:既然都mongodb了,为什么不Meteor?

Sahat Yalkabov 编辑 Ka

dotenv-flow依据环境判断的配置加载工具🔗

安装

npm install dotenv-flow --save

使用

require('dotenv-flow').config();

console.log('database host:', process.env.DATABASE_HOST);
console.log('database port:', process.env.DATABASE_PORT);
console.log('database user:', process.env.DATABASE_USER);
console.log('database pass:', process.env.DATABASE_PASS);
console.log('database name:', process.env.DATABASE_NAME);

加载顺序

👇.env 最先被加载 ️👇.env.local 如果有则加载 👇NODEENV 如果指定了NODEENV且有则加载 👇NODEENV.local 如果指定了NODEENV且有则加载

上面的顺序是覆盖规则,即后加载的如果有对应的key,则会覆盖,如果没有则不会删除原来的key

默认,会加载.env.local 如果指定了NODEENV环境变量,则会加载.env.${NODEENV} 建议的环境名为development, test, production, qa, stage

可通过DOTENVFLOWPATH指明配置加载地址

建议.env.production不要放在git上,而是仅放在服务器上。

Dan Kerimdzhanov 摘译 Ka

docker中使用nodejs的几个技巧🔗

镜像选择小的,推荐node:slim而不是node:alpine

不要修改node_modules文件夹,应该在容器内下载依赖

使用node而不是npm启动程序

主要原因是npm不能转发进程信号

Bret Fisher 摘译 Ka

Monorepos - npm7将提供支持🔗

Monorepos指的是一个git项目里包含多个子项目的结构。

目前npm需要通过lerna来提供支持。

npm7将提供对此种结构的内在支持。

Daniel Sauble 摘译 Ka

Amazon Transcribe Streaming现在支持websocket了🔗

Amazon Transcribe是AWS提供的实时语音解析服务,其内部使用了AI。

现在Amazon Transcribe支持British English (en-GB 英式英语), US English (en-US美式英语), French (fr-FR法语), Canadian French (fr-CA加拿大式法语), and US Spanish (es-US美式西班牙语).

Brandon West 摘译 Ka

前端

semiotic-基于d3的react图表组件🔗

d3很强大,强大得不是很容易用。semiotic对其进行了封装,成了react组件。

三种图表结构:

  • X,Y结构例如line charts(线图)和 scatterplots(散点图)
  • 顺序结构例如直方图
  • 网络结构例如流程图

示例

nteract 编辑 Ka

纯css响应式iframe🔗

iframe父元素relative,css创建一个伪元素,大小是指定的,再将iframe高宽设置为100%。

代码:

Chris Coyier

Lorenzo Cadamuro 编辑 Ka

投稿

Components.ai

Dogfessional

Chris Coyier

你为什么绝对应该学习用CSS-in-JS🔗

CSS-in-JS 做了什么

  • 使用javascript语法写样式

  • 使用组件来编排样式

  • 利用javascript的语法特性

  • 利用javascript生态系统

CSS-in-JS 做了什么抽象

  • 不需要关心级联(cascade)
  • 不需要关心权重(Specificity)
  • 不需要关心命名选择器(Naming selectors)
  • 不需要关心强制命名转换(Enforcing naming conventions)
  • 不需要关心关联其他语言(Linting another language)
  • 不需要关心特定的文件结构(Enforcing file structures for another language)
  • 不需要关心附加的构建工具(Additional build tools) 总之,只需要js就够了。

从哪里开始

阅读 https://www.gatsbyjs.org/docs/css-in-js/ 使用 EmotionStyled-Components

Brent Jackson 摘译 Ka

Jordan Marshall

Matt Perry

react打印组件🔗
const Example = () => {
  const componentRef = useRef();
  return (
    <div>
      <ReactToPrint
        trigger={() => <button>Print this out!</button>}
        content={() => componentRef.current}
      />
      <ComponentToPrint ref={componentRef} />
    </div>
  );
};

gregn

JavaScript Teacher

Python

使用panda读取json🔗

不使用panda

import json
with open('data.json', 'w') as outfile:
    json.dump(data, outfile)

panda读取文件

import pandas as pd

df = pd.read_json('data.json')

df

json to csv

df.to_csv("data.csv")

直接网络获取

# 方法一
url = "https://api.exchangerate-api.com/v4/latest/USD"
df = pd.read_json(url)
df.head()

# 方法二
import requests
from pandas.io.json import json_normalize

url = "https://think.cs.vt.edu/corgis/json/airlines/airlines.json"
resp = requests.get(url=url)

df = json_normalize(resp.json())
df.head()

Erik Marsja 编辑 Ka

Rick Lamers

运维

不要在生产环境中启动程序时整合数据库🔗
  • 生产环境,往往有多个服务器,如果同时发布,容易造成同时整合数据库造成问题。
  • 依赖发布程序来整合数据库,也就依赖程序会有downtime。

解决: 数据库整合应该是单独的操作,这样可以通过策略来避免downtime。 可使用flyway这样的开源工具来自动整合。

Itamar Turner-Trauring 摘译 Ka

扫描二维码关注微信公众号
本期阅读量