node.js - Cum să incluzi node_modules în directorul de ieșire cu TypeScript
Vreau să știu dacă este posibil să copiezi folderul node_modules în directorul de ieșire după rularea comenzii tsc.
Situația mea este că am un proiect cu TypeScript și folosesc câteva pachete npm. Și am nevoie ca directorul meu de ieșire să aibă toate dependențele npm, pentru că trebuie să-l comprim și să-l trimit prin http (la AWS Lambda).
Structura proiectului meu este așa:
|-.vscode --> visual studio code
|-lib --> output dir
|-node_modules --> npm dependencies
|-src --> .ts files
|-jsconfig.json
|-tsconfig.json
Cum pot să realizez asta?
Mulțumesc mult!
Răspuns #1
Îmi place mult mai mult soluția Peopleware decât soluția acceptată, dar nici măcar nu ai nevoie de gulp pentru asta. Poți pur și simplu să faci asta în package.json-ul tău:
{
"scripts": {
"build": "tsc <your command line options>",
"postbuild": "cp package.json dist/package.json && cd dist && npm install --only=production"
}
}
Beneficiul de a face acest lucru în acest mod este că nu copiezi întregul tău folder node_modules, deoarece acesta ar putea avea o mulțime de dependențe folosite doar în timpul dezvoltării.
Poți face același lucru cu resurse statice, cum ar fi imagini sau altele, cu:
"copy-statics": "cp -r static dist/static"
Actualizare: în loc să folosești npm install --only-production, este mai sigur să copiezi atât package.json cât și package-lock.json și apoi să rulezi npm ci --production. Acest lucru asigură că instalezi doar instantaneul de dependențe pe care îl ai în package-lock.json. Astfel, comanda ar arăta astfel:
"postbuild": "cp package*.json dist && cd dist && npm ci --production"
Răspuns #2
Ar trebui să poți doar să cp directorul. Dacă vrei să automatizezi procesul, poți să învelești apelurile tale tsc și cp în scripturi npm în package.json-ul tău:
{
"scripts": {
"build": "tsc <your command line options>",
"postbuild": "cp -R node_modules lib/node_modules"
}
}
Atunci, când folosești npm run build, comanda ta cp ar trebui să ruleze automat de asemenea.
