广告服务一直有log文件增长过快的问题,之前写了一个crontab都是线上手动清空一下旧日志,
NodeJs包与模块机制
CommonJS规范
NodeJs 以 JavaScript(ECMAScript) 为基础,但在 ES6 之前,JavaScript自身是不带有模块机制的,所以社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。
2009 ~ 2010 年间,CommonJS 社区大牛云集,稍微了解点历史的同学都清楚,在同时间出现了 NodeJs,一下子让 javaScript 摇身一变,有了新的用武之地,同时在 NodeJs 推动下的 CommonJS 模块系统也是逐渐深入人心。
使用 CommonJs 规范必须遵守的三个主要约定:
require
一个函数,参数
模块上下文
require函数
exports对象
module对象
exports 和 module.exports 的区别
https://cnodejs.org/topic/5231a630101e574521e45ef8
模块标志
通俗来说就是模块名,官方定义:Module_Identifiers。
不必要遵循的约定(实现与否都可以):
存储方案:一个模块的内容可以存在数据库里,也可以存在文件系统里,还有动态/静态链接库,甚至于函数里(对于 NodeJs 来说就是文件系统,所有模块都放在 node_modules 目录下,当然还有一些 C++ 的模块存在动态链接库中);
加载器:可以支持环境变量(path)寻径(也可以不实现)
总之,NodeJs 应用通过入口文件之后,里面其实是由一个一个模块组成,通常一个模块就是一个遵循 CommonJs 规范书写的 JavaScript 源文件,当然也可能是后缀为 .node 的 C++ 的模块,二进制文件。这些文件通过 require 函数引入后,就可以在程序里使用了,使用 CommonJs 规范作为 NodeJs 的模块导入导出机制,就相当于把每个JavaScript文件或者说模块当做一个不会污染全局的闭包(只要不使用 global)。
CommonJs 模块规范
CommonJs 包规范
包描述文件:package.json,但和 NodeJs 的有些不同。
必填、选填、保留字段
包的格式:一个包含整个包目录(尤其是包含 package.json 文件)的zip格式的归档,首先要有一个 package.json 在根目录,二进制文件存在于名为 bin 的子目录下,JavaScript源码在lib目录下,文档在 doc 文目录下,单元测试文件在 test 目录下,这是一个遵循 CommonJs 规范的包(即使没有遵循规范,只要 package.json 是合法的也是可以用的)
而 NodeJs 的包以目录的形式存在于node_modules,在安装之前(未解压前)通常是一个 tar.gz 格式的包。
Node.js 模块规范
Node.js 包规范
Npm 全称 Node Package Manager,刚开始是node的包管理器,后来发展成整个JavaScript的包管理器
Npm2.x 嵌套式依赖,可以非常优雅的实现某个依赖在项目中多版本共存的情况。对于后端开发及工具类开发的 NodeJs 应用来说,嵌套式依赖其实更适合。
Npm3.x、4.x扁平化依赖方案,适合前端,需要考虑代码体积。
- Node.js 四种模块本质和加载原理
- Node.js 入口模块