module.exports与 exports, export和 export default, import 及 require 的关系

0x01 先说两种加载方式 CommonJS 和 AMD

  1. CommonJS 用于服务端,即 nodeJs 加载模块的方式。每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。模块之间通过 require 进行加载。
  2. AMD 加载方式用于浏览器环境中,因为浏览器从网络加载 JS 有延迟,无法像 nodeJs 服务器环境一样直接读文件。所以使用 define('moduleName',['dependences'], function(){}) 这种方式定义模块。

关于两种方式的介绍,可以看阮一峰的文章: JS 模块化:AMD 规范

0x02 基础知识

一个基础的知识是:module.exportsexportsrequire 这三个是 CommonJS 模块规范。

exportexport defaultimport 属于 ES6 规范。

在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

具体介绍继续看阮一峰老师的 ES6教程

从模块导出和导入来分:

导出模块:module.exportsexportsexportexport default

导入模块:requireimport

Read More

油焖大虾做法备忘

作为我为数不多拿的出手的菜,有段时间不做就忘了做菜时候一些注意事项。
今晚又做了一份,虽然味道还不错,但是没有达到预期的效果。所以做个备注,以便以后做油焖大虾前回顾一下。

0x01 需要准备的材料

  1. 基围虾,20块钱的吧。不要太小的。要买活虾,冷冻的那种肉都比较面,不嫩。
  2. 大葱。 这货必须放,之前做的几次不香,都是因为没有放葱!
  3. 姜,炒虾的时候用
  4. 料酒、生抽、白糖、盐,淀粉。 醋可放可不放,最多一勺,不能放多。

0x02 对虾的处理

买回来以后要减去半个虾头,因为头上有刺。再减掉胡须和一些爪子。
最重要的是从虾头开始,把背部剪开,把虾线挑出来。这样一部分吃着健康舒心,更重要的是好入味。
处理好后用清水冲一下,沥干水。

Tips: 如果乱蹦的活虾不好剪,放入冰箱冻一会,他们就挂了,再剪就可以啦

0x03 备好调料

大葱切段,姜要切片。多少随意,别太少。

准备一个小碗,放入料酒一勺、生抽两勺、白糖一勺、盐一小勺,淀粉一小勺。 醋可放可不放,最多一勺。
有淀粉放一点收出来的汁浓稠好吃,千万别放多。加入两勺清水搅拌均匀。

0x04 开火

点火后倒入比平时做菜稍微多一点的油,重点:一定要把油烧热油烧热烧热

烧热后把虾和姜片一并倒进去,先煎一面,再煎另一面。煎到两面焦黄,闻到一股炸虾的味道就好了。

就在这时候,到入备好的料汁,然后放入葱段,翻炒一下。

0x05 中火焖下,大火收汁

盖上盖子,转中火焖个两分钟就可以啦。然后就是大火收汁啦!

我们就是这么变胖的。。。。

Ubuntu 使用 Docker 搭建 Nginx+PHP 环境

0x01. 添加用户

1
adduser username

0x02. 修改 sudoers

1
2
3
# chmod a+w /etc/sudoers
# username (ALL:ALL) ALL
# chmod a-w /etc/sudoers

0x03. 禁止 root 登录

1
2
3
vim /etc/ssh/sshd_config
# PermitRootLogin yes
PermitRootLogin no

0x04. Ubuntu 安装 Docker-CE

1
2
3
4
5
6
7
8
9
10
11
12
lsb_release -cs //查看发版编号
sudo apt-get -y install apt-transport-https ca-certificates curl
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 如果提示为找到 add-apt-repository command
# sudo apt-get install software-properties-common
sudo apt-get update
sudo apt-get -y install docker-ce

Read More

使用 https, 并将 WWW 跳转到 NON-WWW

0x01: 背景

博客经常不更新,服务器还时不时挂掉一次,导致 PageRank 基本是负的了,不过技术上要跟的上更新啊! 微信小程序接口必须是 https, 这次就当是练手了。

0x02: 整体思路流程

  1. 确保自己的域名解析全部是 A 记录
  2. 使用 Let’s Encrypt 证书, Certbot 安装证书
  3. 使用 Crontab 自动 Renew 证书
  4. 配置 Nginx ,SSL Server
  5. 将 HTTP 跳转到 HTTPS , 将 WWW 跳转到 NON-WWW
  6. 用检测工具检测一下自己 HTTPS 的评级

0x03: 检查自己的域名解析是否是A记录

刚开始使用 Certbot 安装证书的时候,老是报错,经过搜索发现,原来自己的域名有 CNAME 解析的。 所以在安装证书钱,请确保自己的域名都是A记录解析

0x04: 使用免费的 Let’s Encrypt 证书

关于免费的证书,这里有其他选项可供选择:

根据 Lets’ Encrypt 官网说明,我们使用推荐的 Certbot 安装我们的证书。 当然你也可以选择 acme-tiny 来安装证书。
我的服务器环境是 CentOS 7Nginx/1.10.1, 这里强烈推荐大家将Nginx 升级到最新的版本,新版本在SSL配置上比较省事。

1
2
3
4
5
//安装Certbot
sudo yum install certbot
//安装命令很简单, -w 后面跟网站根目录, -d 就是你要添加证书的域名,如果有多个域名,多个-d就可以了
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com

如果顺利,他会提示出安装成功,证书会保存在 /etc/letsencrypt/live/example.com/ 里面。

0x05: 使用 Crontab 定时Renew 证书

因为是免费证书, 所以有一个有效期是90天,到期之后需要 Renew 一下。 官方推荐是每天检查用任务 Renew 两次,因为如果证书没过期,他就只是检测一下,并不会做其他操作。这里我们设置的定时任务是每天检查一次。

1
2
3
4
5
6
$ crontab -e
10 6 * * * certbot renew --quiet
//列出任务看看是否添加成功
$ crontab -l

Read More

NodeJS和NW通过ffi调用dll/so动态库

0x01:使用的 npm 包

首先要安装 node-gyp, 用来重新编译依赖包。

1
npm instal -g node-gyp

然后主要用到下面三个包:

  • node-ffi – 使用Javascript调用动态库

  • ref – 用来定义数据类型,提供指针功能

  • ref-array – 用Buffer来实现C语言中的 array 数据类型

1
2
npm install ffi //这个命令会同时安装上 refref-struct
npm instal ref-array

Read More

Mac安装memcached,解决Unable to initialize module 问题

使用Homebrew安装 memcached 服务端

1
2
brew search memcached
brew install memcached

使用Homebrew安装 php-memcached 扩展

1
2
brew install memcached
brew install homebrew/php/php56-memcached --build-from-source

启动并检查扩展是否正差

1
2
memcached -d -m 24 -p 11211
php -i | grep memcached

排查错误

如果php -i | grep memcached 并没有返回 memcached 的信息,那么打开php的错误log,
检查是否有这个warning

1
2
3
Warning: PHP Startup: memcache: Unable to initialize module
Module compiled with build ID=API20131226,NTS
PHP compiled with build ID=API20131226,NTS,debug

解决办法很简单, 是需要再安装扩展的时候跟上 --build-from-source 参数即可。

1
2
3
4
5
6
#先卸载
brew remove php56-memcached
rm -rf /usr/local/etc/php/5.6/conf.d/ext-memcached.ini
#再安装
brew install homebrew/php/php56-memcached --build-from-source

阿里云VPS搭建自己的的Hexo博客

1. 博客的架构

先搞明白Hexo博客从搭建到自动发布的架构,才能更好的理解我们每一步进行的操作。
不然只跟着步骤过了一遍,却不知道为什么这么做。

首先看这张架构图:
Hexo-Structure

整个流程就是本地将 *.md 渲染成静态文件,然后Git推送到服务器的repository,服务器再通过 git-hooks 同步网站根目录。

Read More

数据库及迁移规范

1. Migrations 起名规则

表名_动作_字段, 动作包括 create, add, delete ,alter。 这样起名的好处是,比较好查找一个表的改动。

如果改变了多个字段, 仅需要写其中一个字段的名称即可。

1
[table_name]_[action]_[column]

示例:

  1. 增加一个example_table 表,因为他没有影响字段,则命名为:

    1
    example_table_create
  2. example表中添加一个字段 user_name, 命名为:

    1
    example_table_add_user_name
  3. 修改 example_table 表中的 user_name , 命名为:

    1
    example_table_alter_user_name

Read More

Mac上安装Nginx+PHP5.6+MySQL+NodeJS+Express

1. 安装Homebrew

如果已经安装,请跳到下一步

HomebrewOSX 上注明的软件包管理器, 可以方便的安装很多常用软件。安装过程很简单,运行一下命令即可。

1
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装完毕以后,由于Homebrew可以能会做一些编译的事情,所以需要安装command line tools, 我用的是 10.8.5 Mountain Lion,请在apple的开发者下载中心(https://developer.apple.com/downloads/)选择自己对应的版本进行下载安装。

brew(意为酿酒)的命名很有意思,全部都使用了酿酒过程中采用的材料/器具,名词对应以下的概念:

  • Formula(配方) 程序包定义,本质上是一个rb文件
  • Keg(桶)程序包的安装路径
  • Cellar(地窖)所有程序包(桶)的根目录
  • Tap(水龙头)程序包的源
  • Bottle (瓶子)编译打包好的程序包

最终编译安装完毕的程序就是一桶酿造好的酒, 更多内容请查看官方“酿酒文档”

Read More

产品狗刚入门时的容易犯错的小事

测试要点

  1. 登录注册功能,要加强力度测,测试非法注册,高频登录
  2. 网页的 Favicontitlekeywordsdescription
  3. 所有图片和链接的alttitile
  4. 输入框在没有输入和输入非法字符的测试
  5. 所有链接的正确性,保证跳转到正确的页面
  6. 设计到js组件的测试要考虑极限情况,比如轮播图最开始和最尾的事件响应

Read More