node.js - Mocha TS-tester misslyckas med `npm test` men inte om de körs direkt


I mitt Node.js-projekt (skrivet i Typescript) kan jag köra mina tester med det här kommandot:

mocha --compilers ts:ts-node/register,tsx:ts-node/register

och de lyckas. Jag använde också detta kommando i min package.json-fil så att

npm test

kör dem på samma sätt, men i det här fallet får jag:

Mikes-iMac:antlr4-graps mike$ npm test

> mocha --compilers ts:ts-node/register,tsx:ts-node/register

module.js:472
    throw err;
    ^

Error: Cannot find module 'ts-node/register'
    at Function.Module._resolveFilename (module.js:470:15)

Min package.json-fil innehåller:

  "scripts": {
    "test": "mocha --compilers ts:ts-node/register,tsx:ts-node/register"
  },

  "devDependencies": {
    "@types/chai": "^3.4.34",
    "@types/mocha": "^2.2.32",
    "@types/node": "^6.0.40",
    "chai": "^3.5.0",
    "mocha": "^2.5.3",
    "typescript": "^2.0.3",
    "vscode": "^1.0.0"
  },

Vilken är den korrekta varianten för att köra mocha via npm?

Svar #1

Problemet är att oavsett vad, så kommer npm run <script> i allmänhet och npm test i synnerhet att köra kommandot med /bin/sh, inte med ditt nuvarande skal, som troligen är annorlunda.

Eftersom du inte har ts-node i dina beroenden antar jag att det är installerat globalt. Beroende på hur du installerar Node.js kan /bin/sh sluta använda en annan Node.js-installation än din nuvarande shell och därför inte ha samma globalt installerade paket.

Om jag har rätt kommer dessa två kommandon att ge olika resultat:

which node
/bin/sh -c 'which node'

Två möjliga lösningar:

  1. Lägg till ts-node i devDependencies för ditt projekt och kör npm install.
  2. Se till att /bin/sh använder samma installation av Node.js som ditt nuvarande skal.