Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

path.resolveは危ない気がするのでpath.joinを使う #2602

Open
Hiroshiba opened this issue Mar 7, 2025 · 0 comments
Open

path.resolveは危ない気がするのでpath.joinを使う #2602

Hiroshiba opened this issue Mar 7, 2025 · 0 comments
Labels
初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上

Comments

@Hiroshiba
Copy link
Member

内容

VOICEVOXエディタ内では、path.join(パスの連結)で問題ない箇所でよくpath.resolve(パスの解決)が行われています。
path.resolveは後ろに絶対パスがあった時に予想外の挙動をするので危ない気がします。

join("hoge/fuga", "/piyo.txt")
-> hoge\fuga\piyo.txt

resolve("hoge/fuga", "/piyo.txt")
-> C:\piyo.txt

↑用のコード

import { join, resolve } from "path";

{
  const result = join("hoge/fuga", "/piyo.txt");
  console.log(`join("hoge/fuga", "/piyo.txt")`);
  console.log("->", result);
}
{
  const result = resolve("hoge/fuga", "/piyo.txt");
  console.log(`resolve("hoge/fuga", "/piyo.txt")`);
  console.log("->", result);
}

{
  const result = join("hoge/fuga", "..", "piyo.txt");
  console.log(`join("hoge/fuga", "..", "piyo.txt")`);
  console.log("->", result);
}
{
  const result = resolve("hoge/fuga", "..", "piyo.txt");
  console.log(`resolve("hoge/fuga", "..", "piyo.txt")`);
  console.log("->", result);
}

場所によっては後ろに絶対パスが来た時にそっちを優先して欲しいようなコードもありそうです。
パスを連結したいのか、そういう想定をしたいのかどっちかわからないので、パスの連結でいい時は連結の方が良さそう。

コード全体でだいたいpath.joinに置き換わったらこのissueはcloseして良いと思います。

Pros 良くなる点

コードの意図が分かりやすくなり、予想外の挙動をしにくくなりそう。

Cons 悪くなる点

結構考えるのがめんどくさくはある。

実現方法

コード全体でresolveで検索し、path.resolveのものを1つ1つjoinにして良いか考えて置き換えていく。
(Promise.resolveのコードもヒットするのでちょっと厄介)

その他

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上
Projects
None yet
Development

No branches or pull requests

1 participant