Búsqueda de sitios web

javascript - ejecutar tsc con nodemon no funciona cuando el archivo cambia


Instalé nodemon y typescript

este es mi script de inicio "start": "nodemon --watch '*/**.ts' --exec tsc && node dist/app.js", ¿qué puede estar mal arriba? se puede iniciar pero no se vuelve a ejecutar cuando el archivo cambia.

También intenté "start": "nodemon --watch '*/**.ts' --exec tsc && node dist/app.js",

Respuesta #1

Hasta donde sé, necesitas especificar la extensión que nodemon debería monitorear, la llamada correcta sería nodemon --watch '*/**.ts' -e ts --exec tsc && node dist/app.js.

Aunque no vas a ejecutar la aplicación ya que el primer comando no termina, por lo que la parte node dist/app.js no se ejecutará.

Recomendaría npm-run-all para esta configuración:

{
  "scripts": {
    "dev": "npm-run-all dev:*",
    "dev:watch": "nodemon --watch '*/**.ts' -e ts --exec tsc",
    "dev:run": "nodemon --watch dist/app.js --exec 'node dist/app.js'"
  }
}

Respuesta #2

Aprecio tu esfuerzo y quiero ofrecerte una alternativa simple que funcione.

Pasos que necesitas seguir:

  • Inicializa un proyecto Nodejs usando npm o yarn
  • Instala typescript y nodemon como dependencia de desarrollo en tu proyecto.
  • Configura tu archivo package.json para que haga las cosas por ti.
  • Crea un archivo tsconfig.json (opcional, pero créeme, ayuda en tu proyecto)

Paso 1 (Configuración del proyecto)

Ejecute los comandos en su terminal.

Create project directory
mkdir sample 

Change in your project directory
cd sample

Intitialize nodejs project
npm init -y

Paso 2 (Configuración de dependencias)

Ejecute los siguientes comandos para instalar nodemon y typescript

Install nodemon and typescript
npm install --save-dev nodemon typescript

Optional (If you like to use intellisense for nodejs modules)
npm install --save-dev @types/node

Paso 3: (Configurar el archivo package.json)

Antes de configurar nuestro archivo package.json, aquí está mi idea:

.
├── dist # Compiled Typescript files to Javascript Files (output directory) 
├── src # We will write typescript here.
├── node_modules
├── package.json 

Escribiremos todo nuestro TypeScript en la carpeta src/ y index.ts será el punto de entrada

Aquí está nuestro archivo package.json

{
  "name": "sample",
  "version": "1.0.0",
  "description": "A simple typescript setup",
+ "main": "dist/index.js",
  "scripts": {
+   "start": "node dist/index.js",
+   "watch": "tsc --watch",
+   "build": "tsc",
+   "dev": "nodemon"
  },
  "keywords": [],
  "author": "Jayant Malik",
  "license": "MIT",
  "devDependencies": {
    "nodemon": "^2.0.6",
    "typescript": "^4.1.2"
  }
}

Paso 4 (tsconfig.json)

Create tsconfig.json file
touch tsconfig.json

Aquí está el contenido del archivo tsconfig.json.

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "lib": [
      "dom",
      "es6",
      "es2017",
      :"ESNext",
      "esnext.asynciterable"
    ],
    "sourceMap": true,
    "outDir": "./dist",
    "moduleResolution": "node",
    "strict": true,
    "importNotUsedAsValues": "remove",
    "alwaysStrict": true,
    "allowUnreachableCode": false,
    "charset": "utf-8",
    "skipLibCheck": true,
    "removeComments": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "noImplicitThis": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "resolveJsonModule": true,
    "baseUrl": "."
  },
  "exclude": [
    "node_modules"
  ],
  "include": [
    "./src",
    "./src/**/*.tsx",
    "./src/**/*.ts"
  ]
}

Paso 5: (Instrucciones para correr)

Puedes abrir múltiples pestañas de terminal para las acciones siguientes.

Pestaña de Terminal 1

Start your development server (nodemon)
npm run dev

Pestaña de Terminal 2

Start typescript server
npm run watch

Entonces, tendrás un proyecto limpio y simple que funcionará.