/images/avatar.jpeg
写过点代码读过点书

node 构建工具的那些事

ts-loader vs babel-loader ts-loader 内部使用的 tsc,主要将 TS 代码转换为 JS 代码,并可以通过 tsconfig.json 中的 target 属性转换成更老的 JS 代码,但是其本身并不支持 polyfill。想要 polyfill 还需要从项目头部导入 core-js。 babel 和 tsc 都能将 es6 转换成 es5,那他们有什么区别? tsc 的优势: 如果要转换 TS,有类型检查 可以生成 .d.ts 类型申明文件 babel 的优势: 支持 polyfill 由于没有类型检查,速度相对更快 构建时,两者可以结合使用。 esbuild 如何编译 ts 文件? 是自己实现了一套,还是用了 tsc? esbuild 内置了对 TypeScript 语法的解析支持,但是抛弃了类型推断。所以如果想要类型推断,还需要使用 tsc --noEmit。 参考文档 在转换为 CommonJS 时,如何处理 esModule 的默认导出? esModule 有 default 这个概念,参考下面的例子: 1 2 3 4 5 6 7 8 // base.

babel 使用指南

babel 解决了什么问题? babel 可以将 ECMAScript 2015+ 的代码转换成向下兼容的低版本的 JS 代码。 其中分为两个方面: 1、语法转换 类似 可选链、箭头函数、扩展运算符 等语法,babel 可以转换为 ES5 的标准。参考下面的例子: 配置文件如下: 1 2 3 4 // babel.config.json { "presets": ["@babel/preset-env"] } 看看 可选链 转换: 1 2 3 4 5 6 7 8 9 10 11 12 13 // 转换前 console.log(a?.b?.c); // 转换后 var _a, _a$b; console.log( (_a = a) === null || _a === void 0 ? void 0 : (_a$b = _a.b) === null || _a$b === void 0 ?

python 启动虚拟环境

venv Python 从 3.3 版本开始,自带了一个虚拟环境 venv, 在 PEP-405 中可以看到它的详细介绍。这边 是其详细的中文文档。 使用方式 1、venv 安装 1 2 3 # Windows 中venv已经以标准库的形式存在,不用再单独安装 # Linux sudo apt-get install python3-venv # 如有不同版本的Python3,可指定具体版本venv:python3.5-venv 2、在指定目录创建一个独立的 Python 运行环境 1 2 # Linux : 在 myenv 目录安装虚拟环境 python3 -m venv myenv 3、激活虚拟环境 1 2 3 # source /path/to/venv/bin/activate # 在上面的例子中,即: source myenv/bin/activate 4、退出虚拟环境 1 deactivate 其他工具 virtualenv: 是目前最流行的 Python 虚拟环境配置工具。它不仅同时支持 Python2 和 Python3,而且可以 为每个虚拟环境指定 Python 解释器,并选择不继承基础版本的包。 pipenv: pipenv 是 Pipfile 主要倡导者、requests 作者 Kenneth Reitz 写的一个命令行工具,主要包含了 Pipfile、pip、click、requests 和 virtualenv,能够有效管理 Python 多个环境,各种第三方包及模块。 参考文档 一文解读 virtualenv & venv & pipenv 之间的联系与区别

node 监听进程的退出

node 主要有三种方式监听进程的退出,三种方式触发的场景各不相同。 process.on('exit',fn) 当 Node.js 进程由于以下任一原因即将退出时,则会触发 ’exit’ 事件: process.exit() 方法被显式调用 Node.js 事件循环不再需要执行任何额外的工作 process.on('SIGINT',fn) SIGINT 通常可以监听到 Ctrl + C 发送的终止信号。 这在 Mac 和 Window 上都支持。 加上 SIGINT 后,会删除 Ctrl + C 的默认行为(Node.js 将不再退出)。这时候如果要关闭,需要在回调函数内部加上相应的关闭逻辑。 1 2 3 4 process.on("SIGINT", (code) => { console.log("SIGINT==>", code); // process.exit(); }); process.on('SIGTERM',fn) SIGTERM 可以监听到对该进程发出的终止信号,例如: 别的 node 进程的 process.kill(pid) 父的 process 中的 subprocess.kill() 在任务管理器中对该进程发送关闭信号 (例如在 Mac 的活动监视器中,退出一个进程) Mac 和 Window 表现不一致,Mac 上能捕捉到这个信号,window 上捕捉不到。 加上 SIGTERM 监听器后,则其默认行为将被删除(Node.js 将不再退出)。这时候如果要关闭,需要在回调函数内部加上相应的关闭逻辑。