npm scripts에서 rimraf를 사용하지 않고 디렉터리 삭제

3901 단어 Node.jsrimraftech

삼행

  • Node.js >= v14.14.0
  • rimraf distnode -e 'fs.rmSync(`dist`, {recursive:true, force:true})'로 대체
  • rimraf dist/*.bundle.js 등glob를 포함하는 교환불가
  • 장황한 설명


    npm scripts에서 필요하지 않은 캐시나 구축된 출력 파일을 삭제하고 싶을 때rimraf POSIX의 포장rm -rf을 이 포장으로 대체하는 경우가 많다.명령 프롬프트(cmd.exe)에 없음npm run을 비롯한 환경 종속 문제를 피하기 위해서다.
    그럼에도 불구하고 포장이 없으면 디렉터리를 차례로 삭제할 수 없기 때문에 좀 번거롭습니다.10.0rmfs.rmdirfs.promises.rmdir에 추가fs.rmdirSync 옵션은 설정recursive을 통해 fs.rmdirSync('foo/', { recursive: true })rm -rf에 접근할 수 있다.그나저나 glob을 사용할 수 없는 것 이외Windows에서 rimraf 실행.
    그러나 실제로 POSIXrmdir는 귀속 삭제 기능이 없기 때문에 recursivermdir 옵션에 추가하면 번거롭다는 의견이 있다.대안으로 추가rmtree라는 함수를 고려한 것 같다.또 POSIX와의 통합성으로 볼 때rm에 해당하는 것fs.unlink도 복잡한 문제가 존재한다.
    그리하여14.0은 POSIXrm에 해당하는 rimraf 직접 사용fs.rmfs.promises.rm를 추가했다.리눅스의 케이스fs.rmSync와 같이 rm -rf로 분류하여 디렉터리를 삭제할 수 있다.
    따라서 fs.rmSync('foo/', { recursive: true, force: true })의 코드를 문자열fs.rmSyncnode --eval로 문자열에 전달하고 디렉터리를 삭제할 수 있다.node -enode -e에서는 REPL과 같은node -p 가져오기가 필요하지 않습니다.또 fs를 선택한 이유는 fs.rmSyncfs.rm부분, ,()=>{}fs.promises.rm부분이 조금 길다는 것이다..promises 귀속 삭제 옵션이 시스템에 추가되었기 때문에 fs.rm 시스템의 fs.rmdir 옵션은 recursive입니다.나중에 이 옵션을 지정해도 무시됩니다.
    [nix-shell:~/fs]$ node -v
    v16.1.0
    
    [nix-shell:~/fs]$ node -e "fs.rmdirSync('bin', {recursive: true})"
    (node:11973) [DEP0147] DeprecationWarning: In future versions of Node.js, fs.rmdir(path, { recursive: true }) will be removed. Use fs.rm(path, { recursive: true }) instead
    (Use `node --trace-deprecation ...` to show where the warning was created)
    
    fs.rm는 모든 기존 LTE에서 사용할 수 있는 것이 노드다.jsv12가 EOL 2022-04-30이 되면또는 v12fs.rm가 반환될 수 있습니다.

    참조 링크


    v16.0.0으로 deprecated
    https://shisama.hatenablog.com/entry/2021/04/22/090000#fsrmdir의 recursive 옵션이 Deprecated로 변경되었습니다.
    http://var.blog.jp/archives/80110966.html
    여기fs.rmdirrecursive를 알고 문서를 보러 갔는데 deprecated가 됐어요. 놀랍게도 이 글을 쓴 계기가 됐어요.
    https://qiita.com/qrusadorz/items/aa6ac6a6d6b3e7d458d5

    좋은 웹페이지 즐겨찾기