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:
- Lägg till
ts-nodeidevDependenciesför ditt projekt och körnpm install. - Se till att
/bin/shanvänder samma installation av Node.js som ditt nuvarande skal.
