Skip to content

node.js

安装软件

在 Ubuntu 22.04 上安装 node

shell
snap info node|head -n 20
sudo snap install node

node --version

修改 npm 代理

shell
npm config set proxy="<http_proxy>"
npm config set https-proxy="<https_proxy>"

npm config delete proxy
npm config delete https-proxy

(可选)安装 cnpm 包管理器并使用淘宝仓库镜像

shell
export https_proxy=http://localhost:7890
npm install -g cnpm
npm install cnpm -g --registry=https://registry.npmmirror.com

基本概念

注:根据上下文 npm 含义可能不一样:

  • 官网:浏览发现和管理软件包
  • 命令行工具:程序员和 npm 交互工具
  • 包注册中心:一个 JavaScript 软件包和相关元数据的大型公开数据库

npm 以下如无特别说明,均是指命令行工具。使用示例:

shell
npm <task> ...

npm config set registry https://registry.npmmirror.com/

npm install
npm upgrade
npm uninstall
npm run <taskName>

task 支持自定义执行指定脚本或命令任务.

包管理器 npm vs yarn vs pnpm

npm: node 默认包管理器; yarn: 支持并行安装包; pnpm: 通过实现本地缓存比 yarn 更快安装包。

从 node v16.x 开始新增 corepack 管理包管理器, 使用 pnpm npx corepack use pnpm@9.10.0

package 包和 module 模块

npm 中的 package (包)是指 一个 package.json 文件中描述的一个文件或一个目录整体。

包可以是以下 7 种形式中一种:

  • 一个目录包含被一个 package.json 文件说明的一个程序
  • 一个 gzip 压缩包
  • 一个解释指向 (b) 的 url
  • 一个在包注册中心上发布的 包含一个 <name>@<version> 字符串和 (c) 信息整体
  • 一个指向 (d) 的一个字符串 <name>@<tag>
  • 一个有 latest 标签满足 (e) 的一个字符串 <name>
  • 一个 git 链接,克隆后产生 (a) 结果

npm 是 node.js 官方包管理器。

module (模块)是一个可以被 Node.js require() 函数在 node_modules 目录中定位任意文件或目录整体。

要被支持定位,必须是以下一种:

  • 一个目录包含 package.json 文件,该文件中有一个 main 字段
  • 一个 JavaScript 文件

只有包含 一个 package.json 文件的模块才是包; 一个 JavaScript 文件也是包。

包名支持 scope (命名空间),避免不同用户或组织同名包会冲突。命名空间类似 @xxx/,作为包名的前缀,示例:

txt
@npm/package-name
@npmcorp/package-name

package.json 包描述文件

在包中添加 package.json 以便于别人管理和安装包。包发布到包注册中心必须包含一个包描述文件 package.json.

一个包描述文件包含以下信息:

  • 列出你项目所有依赖的包
  • 说明你项目通过使用语义化版本规则指定一个包的版
  • 使你的构建可重现执行,以便于和其他开发者分享

必须字段;

可选字段

  • author 作者,格式 Your Name <email@example.com> (http://example.com),邮件和网站都是可选
  • description 包描述,便于他人在 npm 官网搜到你的包
  • main 程序入口文件
  • private 是否禁止 npm 发布到公网
  • scripts 自定义可执行脚本任务
  • dependencies 生产环境才需要的依赖包
  • devDependencies 添加本地研测环境才需要的依赖包
  • browserlist 你想支持哪些版本的浏览器

生成 一个新的 package.json 文件

shell
npm init

# 所有字段默认
npm init --yes

添加依赖

shell
npm install <package-name>
npm install <package-name> --save-dev

package-lock.json 自动解决跟踪依赖版本。

替换指定 npm 包

  • npm add path/to/local/package
  • 修改 package.json,"<PackageName>": "file:../../path/to/local/pacakge",

https://stackoverflow.com/questions/15806241/how-to-specify-local-modules-as-npm-package-dependencies

创建和发布一个 npm 包

  • 在 npmjs.org 创建账号,创建一个 organization,启用 2FA
  • 在本地执行 npm login
  • 发布开源包 npm publish --access=public

Disable output in colorful

Case:

npm config set color false
npm install -g npm-why
npm-why fsevents > output.txt

Problem: The configuration config set color false maybe does not work.

Solution: Run npm-why fsevents > output.txt in CMD, copy it into Notepad++ by manual, then replace ESC\[\d{1,2}m in regular expression by manual.

Released under the CC-BY-NC-4.0