Skip to content

Commit

Permalink
error styled
Browse files Browse the repository at this point in the history
  • Loading branch information
ityuany committed Jul 24, 2024
1 parent 04330ba commit 6ce3c0b
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 91 deletions.
26 changes: 5 additions & 21 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,33 +70,14 @@ brew install snm

| 配置项 | 默认值 | 功能描述 |
| ----------------------------- | --------------------------------- | ------------------------------- |
| SNM_STRICT | false | 严格模式开关 |
| SNM_NODE_BIN_DIR | node_bin | node 的二进制存储目录 |
| SNM_DOWNLOAD_DIR | downloads | 文件的下载目录 |
| SNM_NODE_MODULES_DIR | node_modules | npm 、pnpm、yarn 的模块存储目录 |
| SNM_NODE_DIST_URL | https://nodejs.org/dist | nodejs 元数据的获取地址 |
| SNM_DOWNLOAD_TIMEOUT_SECS | 60 | 下载超时时间 ( 单位为 `` ) |
| SNM_NODE_GITHUB_RESOURCE_HOST | https://raw.githubusercontent.com | GITHUB_RESOURCE 地址 |
| SNM_NODE_INSTALL_STRATEGY | auto | node 的安装策略 |

### SNM_STRICT

#### 我们一般建议在 CI 环境中打包严格模式,当你配置为 true 时,你需要遵守以下约定

- 关于 Node
- 你执行命令的目录中必须包含 `.node-version` 文件并正确指定版本
- 关于 packageManager
- 你执行命令的目录中必须包含 `package.json` 文件且正确配置 `packageManager` 字段。
- 在你单条命令的所有生命周期内,只要牵扯到使用包管理器执行 `install``run` 命令,则必须保证使用相同的包管理器。

#### 我们一般建议在本地环境关闭严格模式,当你配置为 false 时你需要注意以下问题

- 关于 Node
- 如果存在 `.node-version` , 那么将遵循你配置的版本去执行。
- 如果不存在 `.node-version` , 那么将使用默认的 node 执行 , 你应该使用 `snm node default <version>` 指定一个默认版本
- 关于 packageManager
- 如果 `package.json` 中存在 `packageManager` 配置 , 那么将遵循你配置的包管理器去执行,如果你使用的命令不符合,将会抛出错误。
- 如果不存在 `package.json` 文件或 `package.json` 中不存在 `packageManager` 配置,那么将使用默认的包管理器执行。
| SNM_NODE_WHITE_LIST | "" | node 白名单版本 |

### SNM_NODE_BIN_DIR

Expand Down Expand Up @@ -129,5 +110,8 @@ snm 获取 node 最新版本信息的地址 , 并且我们的下载前缀也会
node 的安装策略,可选值范围如下:

- ask ( 询问用户是否需要安装,这也是默认值 )
- panic ( 如果本地不存在该版本则直接报错 )
- auto ( 静默安装 )

### SNM_NODE_WHITE_LIST

可执行的 node 白名单列表
71 changes: 1 addition & 70 deletions crates/snm_utils/src/snm_error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ pub enum SnmError {
#[error("Not found: {0}")]
NotFoundResourceError(String),

#[error("Not found package.json {0}")]
NotFoundPackageJsonError(PathBuf),

#[error("Package manager version not match, expected: {expected}, actual: {actual}")]
NotMatchPackageManagerError {
raw_command: String,
Expand Down Expand Up @@ -62,18 +59,12 @@ pub enum SnmError {
#[error("Parse package manager error , raw is {0}")]
ParsePackageManagerError(String),

#[error("Unsupported command: {raw_command}")]
UnsupportedCommandError { raw_command: String },

#[error("Duplicate lock file error")]
DuplicateLockFileError { lock_file_vec: Vec<String> },

#[error("{stderr}")]
SNMBinaryProxyFail { stderr: String },

#[error("Cannot find command: {command}")]
CannotFindDefaultCommand { command: String },

#[error("Shasum error: {file_path} , expect: {expect} , actual: {actual}")]
ShasumError {
file_path: String,
Expand All @@ -87,55 +78,6 @@ pub enum SnmError {

pub fn friendly_error_message(error: SnmError) {
match error {
SnmError::BuildConfigError(_) => {
eprintln!(
r##"
👹 Build snm config error
The following is a list of configurations supported by snm:
SNM_STRICT:
Whether to enable strict mode, default is false.
In strict mode,
Must be a .node-version file in current_dir and the correct version number configured.
Must be a package.json in current_dir with the correct configuration of packageManager, for example: [email protected]
SNM_NODE_BIN_DIR:
The directory where the node binary is stored, default is node_bin.
SNM_DOWNLOAD_DIR:
The directory where the downloaded file is stored, default is downloads.
SNM_NODE_MODULES_DIR:
The directory where the node_modules is stored, default is node_modules.
SNM_NODE_DIST_URL:
The download address of the node binary, the default is https://nodejs.org/dist .
SNM_GITHUB_RESOURCE_HOST:
The download address of the node binary, the default is https://raw.githubusercontent.com .
SNM_NODE_INSTALL_STRATEGY:
The installation strategy of the node binary, the default is auto. You can choose ask, panic, auto.
SNM_DOWNLOAD_TIMEOUT_SECS:
The download timeout time, the default is 60s.
SNM_PACKAGE_MANAGER_INSTALL_STRATEGY:
The installation strategy of the package manager, the default is auto. You can choose ask, panic, auto.
"##
);
}
SnmError::ParsePackageManagerError(raw) => {
eprintln!(
r##"
Expand Down Expand Up @@ -223,16 +165,6 @@ pub fn friendly_error_message(error: SnmError) {
actual.red()
);
}
SnmError::UnsupportedCommandError { raw_command } => {
eprintln!(
r##"
👹 You exec command is unsupported
{}
"##,
raw_command
);
}
SnmError::DuplicateLockFileError { lock_file_vec } => {
eprintln!(
r##"
Expand Down Expand Up @@ -289,14 +221,13 @@ pub fn friendly_error_message(error: SnmError) {
);
}
SnmError::HttpStatusCodeUnOk
| SnmError::NotFoundPackageJsonError(_)
| SnmError::GetWorkspaceError
| SnmError::DeserializeError(_)
| SnmError::NetworkError(_)
| SnmError::DialoguerError(_)
| SnmError::VarError(_)
| SnmError::CannotFindDefaultCommand { command: _ }
| SnmError::ZipError(_)
| SnmError::BuildConfigError(_)
| SnmError::IOError(_) => {
let msg = format!("{}", error.to_string());
// panic!("{msg}");
Expand Down

0 comments on commit 6ce3c0b

Please sign in to comment.