npm
config
查看某一个配置:npm config get proxy
(http代理)、npm config get https-proxy
(https代理);
修改某个配置:npm config set proxy xxx
,其他同理;
查看所有配置:npm config list
, npm config ls -l
展示更详细;
删除某个配置:npm config delete proxy
,其他同理;
常见配置:
- registry
- proxy
Node
常见命令
查看哪些模块依赖了 xxx
yarn why xxx
npm:
npm ls xxx
查看当前的镜像源:
yarn config get npmRegistryServer
修改为淘宝镜像源:
yarn config set npmRegistryServer https://registry.npm.taobao.org
查看有效配置:
yarn config -v
疑问
1.为什么执行 yarn add xxx
也会有 project valid、resolution、fetch、link 这些 step?
Yarn 包管理器会执行一系列步骤来确保顺利安装所需的包,并处理依赖关系。以下是这些步骤的简要说明:
- Project Validation(项目验证):Yarn 首先会验证项目根目录下的
package.json
文件,并检查是否存在有效的项目配置。这个步骤是为了确保你在正确的项目目录下执行命令,并且项目配置正确。 - Resolution(依赖解析):Yarn 接下来会解析你要安装的包(例如
xxx
)及其版本号,并确定所需的依赖关系。它会检查项目的yarn.lock
文件(如果存在)以获取准确的依赖版本,并确保解析的依赖关系与当前项目的其他部分兼容。 - Fetch(依赖下载):一旦依赖解析完成,Yarn 将开始从网络上下载所需的包及其依赖项。它会检查本地缓存,如果已经下载过这些包,就会直接使用缓存,否则会从远程仓库下载它们。
- Link(依赖链接):在下载完成后,Yarn 会将这些包链接到项目的
node_modules
目录中。这意味着它会在正确的位置创建符号链接,以使这些包可以被项目的其他部分引用。
这些步骤的目的是确保包的正确安装,并处理依赖关系以避免冲突或版本不兼容的问题。此外,执行这些步骤还可以提高包的安装速度,因为它们允许 Yarn 在安装过程中利用缓存和链接的特性。
疑难杂症
yarn 执行 eslint ./src/**
spawn ENAMETOOLONG
通常发生在文件路径超过操作系统允许的最大长度时。在这种情况下,它可能是由于 eslint ./src/**
命令尝试匹配的文件数量太多
ETIMEDOUT
> ➤ YN0000: ┌ Resolution step
> ➤ YN0001: │ RequestError: connect ETIMEDOUT 104.16.3.35:443
> at ClientRequest.<anonymous> (D:\workspace\pp\pro\b_d\app\client\.yarn\releases\yarn-3.5.1.cjs:195:14340)
> at Object.onceWrapper (node:events:629:26)
> at ClientRequest.emit (node:events:526:35)
> at o.emit (D:\workspace\pp\pro\b_d\app\client\.yarn\releases\yarn-3.5.1.cjs:190:90286)
> at TLSSocket.socketErrorListener (node:_http_client:501:9)
> at TLSSocket.emit (node:events:514:28)
> at emitErrorNT (node:internal/streams/destroy:151:8)
> at emitErrorCloseNT (node:internal/streams/destroy:116:3)
> at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
> at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16)
> ➤ YN0000: └ Completed in 1m 33s
> ➤ YN0000: Failed with errors in 1m 33s
访问不了国外的库源,切换库源切换成淘宝镜像:
yarn config set npmRegistryServer https://registry.npm.taobao.org
No candidates found
错误信息:
$ yarn add design-system@2.1.30 ➤ YN0000: ┌ Resolution step ➤ YN0001: │ Error: design-system@npm:2.1.30: No candidates found at ge (D:\workspace\pp\pro\b_d\app\client.yarn\releases\yarn-3.5.1.cjs:439:8124) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async Promise.allSettled (index 149) at async io (D:\workspace\pp\pro\b_d\app\client.yarn\releases\yarn-3.5.1.cjs:390:10398) ➤ YN0000: └ Completed in 1s 901ms ➤ YN0000: Failed with errors in 1s 911ms
remote archive doesn't match
执行 yarn,控制台报错:
question:➤ YN0018: │ @babel/preset-env@npm:7.22.9: The remote archive doesn't match the expected checksum
yarn.lock 文件指定的版本和预期版本冲突,删掉 yarn.lock 重新 yarn
@sentry/cli
执行 yarn,link 步骤出现 @sentry/cli@npm:1.75.2 couldn't be built successfully (exit code 1, logs can be found here: D:\temp\xfs-0d7a820d\build.log)
[sentry-cli] Downloading from https://downloads.sentry-cdn.com/sentry-cli/1.75.2/sentry-cli-Windows-x86_64.exe
Error: Unable to download sentry-cli binary from https://downloads.sentry-cdn.com/sentry-cli/1.75.2/sentry-cli-Windows-x86_64.exe.
Error code: ECONNRESET
解决:
发现是**@sentry/webpack-plugin依赖了@sentry/cli**
单独安装@sentry/webpack-plugin
yarn add @sentry/webpack-plugin@1.18.9
postcss.plugin was deprecated.
执行 yarn start,终端提示:postcss-resolve-url: postcss.plugin was deprecated. Migration guide: https://evilmartians.com/chronicles/postcss-8-plugin-migration
项目中并没有用到 postcss-resolve-url 模块或插件;
postcss 8.4.31 存在这个问题,跟换版本,建议最新版。
Nested CSS was detected
执行 yarn start,终端提示:Nested CSS was detected, but CSS nesting has not been configured correctly
这是因为项目中的某个模块使用了 css 嵌套,但是配置不正确
postcss.config.js
/* eslint-disable @typescript-eslint/no-var-requires */
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: [
require("postcss-import"),
require("tailwindcss/nesting"),
require("tailwindcss"),
require("autoprefixer"),
],
};
module.exports = config;
tailwind.config.js
export const plugins = [require("tailwindcss/nesting")];
重启。
参考
https://github.com/tailwindlabs/tailwindcss/discussions/7035
node
知识体系一览
Node.js
├── 基础知识
│ ├── JavaScript 基础
│ ├── Node.js 模块系统
│ ├── 全局对象和变量
│ └── 事件驱动编程
├── 核心模块
│ ├── 文件系统(fs)
│ ├── HTTP
│ ├── 路径(path)
│ ├── 操作系统(os)
│ ├── 命令行参数(process)
│ ├── 缓冲区(Buffer)
│ └── 更多...
├── 异步编程
│ ├── 回调函数
│ ├── Promise
│ ├── async/await
│ └── 事件与事件触发器
├── Web 开发
│ ├── Express 框架
│ ├── Koa 框架
│ ├── RESTful API
│ ├── WebSocket
│ ├── 模板引擎
│ ├── 身份验证和授权
│ └── 更多...
├── 数据库集成
│ ├── MySQL
│ ├── MongoDB
│ ├── PostgreSQL
│ ├── Redis
│ ├── SQLite
│ └── ORM(对象关系映射)
├── 包管理工具(npm)
│ ├── 安装和使用包
│ ├── 创建和发布包
│ ├── 包的版本管理
│ ├── 包的依赖管理
│ └── 更多...
├── 调试和测试
│ ├── Node.js 调试器
│ ├── 单元测试
│ ├── 集成测试
│ ├── 基准测试
│ └── 更多...
├── 安全性和认证
│ ├── 常见安全问题
│ ├── 加密和哈希
│ ├── 认证和授权
│ ├── CSRF 防御
│ └── 更多...
├── 性能优化
│ ├── 代码优化
│ ├── 内存管理
│ ├── 并发和并行
│ ├── 缓存和CDN
│ └── 更多...
├── 部署和容器化
│ ├── 部署到服务器
│ ├── Docker 容器化
│ ├── 使用 Kubernetes
│ ├── 自动化部署
│ └── 更多...
├── Serverless 架构
│ ├── 什么是 Serverless
│ ├── AWS Lambda
│ ├── Azure Functions
│ ├── Google Cloud Functions
│ └── 更多...
├── RESTful API
│ ├── 设计原则
│ ├── 路由和控制器
│ ├── 数据验证
│ ├── 错误处理
│ └── 更多...
├── GraphQL
│ ├── GraphQL 查询语言
│ ├── 构建 GraphQL API
│ ├── 数据解析和验证
│ ├── 客户端集成
│ └── 更多...
├── 开发工具和工作流
│ ├── ESLint
│ ├── Prettier
│ ├── Webpack
│ ├── Babel
│ ├── Nodemon
│ └── 更多...
└── 社区和资源
├── 官方文档和教程
├── 博客和论坛
├── 开源项目
├── 示例代码
└── 更多...