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.
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
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"
}
}
À 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.
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 --
).
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
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!