web-dev-qa-db-fra.com

Comment installer et exécuter TypeScript localement dans npm?

Je souhaite installer et exécuter TypeScript (c’est-à-dire sans dépendance globale).

Voici mon fichier package.json:

{
  "name": "foo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "tsc": "tsc"
  },
  "devDependencies": {
    "TypeScript": "^1.8.10"
  },
  "author": "",
  "license": "ISC"
}

Je cours ensuite:

npm install
npm run tsc

Cependant, lorsque j'exécute la deuxième commande, je reçois tellement d'erreurs qu'il ne peut pas tout afficher. La plupart de cela ressemble à ce qui suit:

../foo/node_modules/TypeScript/lib/lib.d.ts(5015,5): error TS2300: Duplicate identifier 'webkitTransformOrigin'.
../foo/node_modules/TypeScript/lib/lib.d.ts(5016,5): error TS2300: Duplicate identifier 'webkitTransformStyle'.
../foo/node_modules/TypeScript/lib/lib.d.ts(5017,5): error TS2300: Duplicate identifier 'webkitTransition'.
../foo/node_modules/TypeScript/lib/lib.d.ts(5018,5): error TS2300: Duplicate identifier 'webkitTransitionDelay'.
../foo/node_modules/TypeScript/lib/lib.d.ts(5019,5): error TS2300: Duplicate identifier 'webkitTransitionDuration'.
../foo/node_modules/TypeScript/lib/lib.d.ts(5020,5): error TS2300: Duplicate identifier 'webkitTransitionProperty'.

Dans npm-debug.log, je reçois:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/nodejs', '/usr/bin/npm', 'run', 'tsc' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'pretsc', 'tsc', 'posttsc' ]
5 info lifecycle [email protected]~pretsc: [email protected]
6 silly lifecycle [email protected]~pretsc: no script for pretsc, continuing
7 info lifecycle [email protected]~tsc: [email protected]
8 verbose lifecycle [email protected]~tsc: unsafe-perm in lifecycle true
9 verbose lifecycle [email protected]~tsc: PATH: /usr/lib/node_modules/npm/bin/node-gyp-bin:/home/vagrant/foo/node_modules/.bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
10 verbose lifecycle [email protected]~tsc: CWD: /home/vagrant/foo
11 silly lifecycle [email protected]~tsc: Args: [ '-c', 'tsc' ]
12 silly lifecycle [email protected]~tsc: Returned: code: 2  signal: null
13 info lifecycle [email protected]~tsc: Failed to exec tsc script
14 verbose stack Error: [email protected] tsc: `tsc`
14 verbose stack Exit status 2
14 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/lib/utils/lifecycle.js:242:16)
14 verbose stack     at emitTwo (events.js:100:13)
14 verbose stack     at EventEmitter.emit (events.js:185:7)
14 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/lib/utils/spawn.js:40:14)
14 verbose stack     at emitTwo (events.js:100:13)
14 verbose stack     at ChildProcess.emit (events.js:185:7)
14 verbose stack     at maybeClose (internal/child_process.js:850:16)
14 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:5)
15 verbose pkgid [email protected]
16 verbose cwd /home/vagrant/foo
17 error Linux 3.13.0-88-generic
18 error argv "/usr/bin/nodejs" "/usr/bin/npm" "run" "tsc"
19 error node v5.12.0
20 error npm  v3.10.2
21 error code ELIFECYCLE
22 error [email protected] tsc: `tsc`
22 error Exit status 2
23 error Failed at the [email protected] tsc script 'tsc'.
23 error Make sure you have the latest version of node.js and npm installed.
23 error If you do, this is most likely a problem with the foo package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error     tsc
23 error You can get information on how to open an issue for this project with:
23 error     npm bugs foo
23 error Or if that isn't available, you can get their info via:
23 error     npm owner ls foo
23 error There is likely additional logging output above.
24 verbose exit [ 1, true ]

Notez que supprimer le package puis installer TypeScript résout globalement le problème. Cependant, si j'utilise ensuite npm install pour réinstaller les packages locaux, le problème est réintroduit.

29
Yahya Uddin

Pour installer TypeScript local dans le projet en tant que dépendance de développement, vous pouvez utiliser --save-dev clé

npm install --save-dev TypeScript

Il écrit également le TypeScript dans votre package.json

Vous devez également avoir un tsconfig.json fichier. Par exemple

{
  "compilerOptions": {
    "target": "ES5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules",
    ".npm"
  ]
}

Pour plus d'informations sur le tsconfig, vous pouvez voir ici http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

24
Mikhail

Il m'a fallu un certain temps pour trouver la solution à ce problème - c'est dans la question initiale. Vous devez avoir un script qui appelle tsc dans votre package.json fichier pour pouvoir exécuter:

npm run tsc 

Comprendre -- avant de passer aux options (ou simplement de les inclure dans le script):

npm run tsc -- -v

Voici un exemple package.json:

{
  "name": "foo",
  "scripts": {
    "tsc": "tsc"
  },
  "dependencies": {
    "TypeScript": "^1.8.10"
  }
}
36
ubershmekel

À partir de npm 5.2.0, une fois que vous avez installé localement via

npm i TypeScript --save-dev

... vous n'avez plus besoin d'une entrée dans la section scripts de package.json - vous pouvez maintenant exécuter le compilateur avec npx :

npx tsc

Maintenant, vous n'avez plus besoin de mettre à jour votre fichier package.json à chaque fois que vous voulez compiler avec différents arguments.

21
Faust

Vous devez indiquer à npm que "tsc" existe en tant que package de projet local (via la propriété "scripts" de votre package.json), puis exécutez-le via npm run tsc. Pour faire cela (au moins sur Mac), je devais ajouter le chemin du compilateur dans le paquet, comme ceci

{
  "name": "foo"
  "scripts": {
    "tsc": "./node_modules/TypeScript/bin/tsc"
  },
  "dependencies": {
    "TypeScript": "^2.3.3",
    "typings": "^2.1.1"
  }
}

Après cela, vous pouvez exécuter n’importe quelle commande TypeScript comme npm run tsc -- --init _ (les arguments viennent après le premier --).

7
Jim Doyle

tsc nécessite un fichier de configuration ou des fichiers .ts (x) à compiler.

Pour résoudre ces deux problèmes, créez un fichier nommé tsconfig.json avec le contenu suivant:

{
    "compilerOptions": {
        "outFile": "../../built/local/tsc.js"
    },
    "exclude": [
        "node_modules"
    ]
}

En outre, modifiez votre exécution de npm avec cette

tsc --config /path/to/a/tsconfig.json
2
Bikas

Notez que si vous utilisez typings, procédez comme suit:

rm -r typings
typings install

Si vous faites le tutoriel angular 2, utilisez ceci:

rm -r typings
npm run postinstall
npm start

si la commande postinstall ne fonctionne pas, essayez d'installer les typages globalement comme ceci:

npm install -g typings

vous pouvez également essayer ce qui suit au lieu de postinstall:

typings install

et vous devriez avoir ce problème résolu!

1
Yahya Uddin