npm run dev는 "내 웹사이트를 로컬에서 실행"하는 표준인데 어떻게 작동하나요? 기능을 어떻게 확장할 수 있나요? 이 게시물에서 살펴볼 내용은 다음과 같습니다.
동기 부여의 예로, 다음은 볼록 도우미 예제 앱에 정의된 몇 가지 스크립트입니다. 각 작품이 어떤 역할을 하는지 살펴보겠습니다
"scripts": { "dev": "npm-run-all --parallel dev:backend dev:frontend", "build": "tsc && vite build", "dev:backend": "convex dev", "dev:frontend": "vite", "predev": "convex dev --until-success", "test": "vitest" },
npm run은 프로젝트 작업공간의 package.json에 정의된 명령을 실행합니다. 이러한 명령은 다음 명령을 사용하여 npm create vite@latest와 같은 명령으로 저장소를 시작할 때 사전 구성되는 경우가 많습니다.
다음은 Next.js의 기본 예입니다.
// in package.json { // ... "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" }, //...
여기에서 npm run dev 또는 npm run lint 등을 실행할 수 있습니다.
문서에서 npm run에 대해 자세히 알아볼 수 있습니다.
이미 그렇게 간단한 명령을 패키지 스크립트에 넣는 이유는 정당한 질문입니다. 그냥 jest나 vite 또는 next build를 호출하면 안 되나요? 몇 가지 좋은 이유가 있습니다.
그렇습니다! 다른 패키지 관리자를 사용하여 종속성을 설치하더라도 npm을 사용하여 패키지 스크립트를 계속 실행할 수 있습니다.
yarn # similar to `npm install` npm run dev # still works!
npm run dev가 Yarn dev(또는 Yarn Run dev)에 매핑된다는 점을 기억할 필요가 없습니다. npx도 마찬가지입니다. npx 볼록 개발은 설치에 사용한 패키지 관리자에 관계없이 작동합니다.
명령을 동시에 실행하는 데 사용할 수 있는 몇 가지 패키지가 있습니다.4
여기에서는 npm-run-all을 살펴보겠습니다. 우리의 예를 생각해 보세요:
"scripts": { "dev": "npm-run-all --parallel dev:backend dev:frontend", "dev:backend": "convex dev", "dev:frontend": "vite", },
이것은 세 가지 스크립트를 정의합니다.
두 출력 모두 스트리밍되며 Ctrl-C를 누르면 두 스크립트가 모두 중단됩니다.
명령어 이름을 preX 또는 postX로 지정하여 다른 명령(예: X) 이전(사전) 또는 이후(사후)에 실행할 명령을 지정할 수 있습니다. 예에서:
"scripts": { "dev": "npm-run-all --parallel dev:backend dev:frontend", "dev:backend": "convex dev", "dev:frontend": "vite", "predev": "convex dev --until-success", },
이렇게 하면 npm-run-all --parallel dev:backend dev:frontend의 "dev" 명령 이전에 convex dev --until-success가 실행됩니다.
For those used to shell scripting, you can run two commands in sequence if the previous one succeeds with commandA && commandB. This works on both Windows and Unix (mac / linux).
However, there's a couple advantages to just using pre-scripts:
For Convex, when you first run npx convex dev (or npm run dev with the above scripts), it will ask you to log in if you aren't already, and ask you to set up your project if one isn't already set up. This is great, but interactive commands that update the output text don't work well when the output is being streamed by multiple commands at once. This is the motivation for running npx convex dev --until-success before npx convex dev.
If you change your "predev" command for Convex to include --run it will run a server-side function before your frontend has started.
"scripts": { //... "predev": "convex dev --until-success --run init", //... },
The --run init command will run a function that is the default export in convex/init.ts. You could also have run --run myFolder/myModule:myFunction. See docs on naming here. See this post on seeding data but the gist is that you can define an internalMutation that checks if the database is empty, and if so inserts a collection of records for testing / setup purposes.
If you use TypeScript, you can run a type check / compile your typescript files with a bare tsc. If your tsconfig.json is configured to emit types, it will write out the types. If not, it will just validate the types. This is great to do as part of the build, so you don't build anything that has type errors. This is why the above example did:
"build": "tsc && vite build",
If you want to pass arguments to a command, for instance passing arguments to your testing command to specify what test to run, you can pass them after a -- to separate the command from the argument. Technically you don't need -- if your arguments are positional instead of --prefixed, but it doesn't hurt to always do it in case you forget which to do it for.
npm run test -- --grep="pattern"
We looked at some ways of using package.json scripts to simplify our workflows. Who knew how much power could rest behind a simple npm run dev? Looking at our original example:
"scripts": { "dev": "npm-run-all --parallel dev:backend dev:frontend", "build": "tsc && vite build", "dev:backend": "convex dev", "dev:frontend": "vite", "predev": "convex dev --until-success", "test": "vitest" },
The way your shell finds which command to run when you type npm is to check the shell's PATH environment variable (on unix machines anyways). You can see your own with echo "$PATH". It checks all the places specified in $PATH and uses the first one. ↩
Technically you can override & specify where npm installs binaries. ↩
정말로 원한다면 npm exec vitest, 줄여서 npx vitest, ./npm_modules/.bin/vitest를 직접 실행하거나 PATH에 .npm_modules/.bin을 추가할 수 있습니다. ↩
어떤 사람들은 &를 사용하여 백그라운드에서 하나의 작업을 실행하지만 이는 Windows에서 지원되지 않으며 한 명령을 중단한다고 해서 반드시 다른 명령이 종료되는 것은 아닙니다. ↩
위 내용은 package.json 스크립트로 'npm run dev' 성능 강화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!