Cum să instalați și să rulați Typescript local în npm? (Programare, Node.Js, Typescript, Npm)

Yahya Uddin a intrebat.

Vreau să instalez și să execut Typescript (adică fără dependențe globale).

Iată fișierul meu 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"
}

Apoi execut:

npm install
npm run tsc

Cu toate acestea, atunci când execut a doua comandă, primesc atât de multe erori încât nu le poate afișa pe toate. Cele mai multe dintre ele sunt de genul celor de mai jos:

../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'.

În npm-debug.log primesc:

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 ]

Rețineți că eliminarea pachetului și apoi instalarea globală a typescript rezolvă problema. Cu toate acestea, dacă folosesc apoi npm install pentru a instala din nou pachetele locale, se reintroduce problema.

7 răspunsuri
Mikhail

Pentru a instala TypeScript local în proiect ca dependență de dezvoltare, puteți utiliza --save-dev cheie

npm install --save-dev typescript

Este, de asemenea, scrie typescriptul în fișierul dvs. package.json

De asemenea, trebuie să aveți un tsconfig.json fișier. De exemplu

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

Pentru mai multe informații despre tsconfig puteți vedea aici http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Comentarii

  • cu ce diferă asta de ceea ce am făcut eu în package.json. Tot ceea ce face este să instaleze scriptul de tip și să îl salveze în dependențele mele. Este, de asemenea, o dependență dev (nu o dependență normală), așa că ar trebui să fie npm install --dev-save –  > Por Yahya Uddin.
  • @YahyaUddin aveți un tsconfig.json ? –  > Por Mikhail.
  • Am încercat diferite moduri de a provoca eroarea pe care ați furnizat-o în întrebarea dvs. sau ceva de genul acesta, dar nu am reușit –  > Por Mikhail.
  • Această soluție pare să funcționeze deocamdată. Totuși, rețineți că nu aveți voie să utilizați files și exclude în același timp, în conformitate cu: github.com/TypeStrong/atom-typescript/blob/master/docs/… Vă mulțumim pentru ajutor. Voi da o actualizare dacă acest lucru funcționează! –  > Por Yahya Uddin.
  • @YahyaUddin Vorbesti serios github.com/TypeStrong/atom-typescript/blob/master/docs/…? Mulțumesc, o voi lua în considerare pentru viitor –  > Por Mikhail.
ubershmekel

Mi-a luat ceva timp pentru a găsi soluția la această problemă – este în întrebarea originală. Trebuie să aveți un script care să apeleze tsc în package.json fișier astfel încât să puteți rula:

npm run tsc 

Includeți -- înainte de a introduce opțiunile (sau doar de a le include în script):

npm run tsc -- -v

Iată un exemplu package.json:

{
  "name": "foo",
  "scripts": {
    "tsc": "tsc"
  },
  "dependencies": {
    "typescript": "^1.8.10"
  }
}

Comentarii

  • Problemă greu de căutat pe Google! Funcționează pentru pachetele cli care vă sugerează să le instalați la nivel global, dar le doriți doar la nivel local, mulțumesc! –  > Por Cammy.
  • mulțumesc…,, am căutat o soluție și răspunsul tău funcționează pentru mine. –  > Por Phil.
Faust

Începând cu npm 5.2.0, odată ce ați instalat local prin intermediul

npm i typescript --save-dev

nu mai aveți nevoie de o intrare în fișierul scripts din secțiunea package.json — acum puteți rula compilatorul cu npx:

npx tsc

Acum nu mai trebuie să vă actualizați fișierul package.json de fiecare dată când doriți să compilați cu argumente diferite.

Comentarii

  • Aceasta este o sugestie genială. Mi-a salvat o tonă de timp –  > Por Devin.
  • npx tsc este cu siguranță calea de urmat dacă aveți nevoie de o soluție ușoară, cu configurație minimă, pentru proiecte locale. Poate fi folosit chiar și fără npm i pentru comenzile executate rar, deși fără a rula npm i mai întâi, npx va trebui să instalați pachetele necesare într-un dosar temporar de fiecare dată. Mai multe informații despre npx aici: medium.com/@maybekatz/… –  > Por ian.pvd.
  • Acesta a fost răspunsul pentru mine! –  > Por the chad.
  • perfect, răspunsul corect actual –  > Por Jeremy.
Jim Doyle

Trebuie să îi spuneți lui npm că „tsc” există ca pachet local al proiectului (prin intermediul proprietății „scripts” din package.json) și apoi să îl rulați prin npm run tsc. Pentru a face acest lucru (cel puțin pe Mac) a trebuit să adaug calea pentru compilatorul real în cadrul pachetului, astfel

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

După aceea, puteți rula orice comandă TypeScript, cum ar fi npm run tsc -- --init (argumentele vin după primul --).

Comentarii

  • Dacă executați tsc din directorul rădăcină al repo-ului dvs. (unde aveți node_modules), acest lucru nu este necesar, ar trebui să puteți rula tsc fără un script suplimentar. Dar atunci când aveți un monorepo cu fișiere package.json imbricate și doriți să executați tsc acolo fără a instala typescript în directorul-repo-copil, acest lucru este foarte util! Vă mulțumim! –  > Por Phil.
Bikas

tsc necesită un fișier de configurare sau fișiere .ts(x) pentru a compila.

Pentru a rezolva ambele probleme, creați un fișier numit tsconfig.json cu următorul conținut:

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

De asemenea, modificați execuția npm cu acest

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

Comentarii

  • Am avut nevoie doar de partea de excludere pentru ca acesta să funcționeze. De asemenea, nu este nevoie să folosiți -- config parametru, deoarece typescript caută acolo în mod automat, cu condiția să fie la rădăcina proiectului dvs. –  > Por Yahya Uddin.
  • Mulțumesc. Nu știam asta.  > Por Bikas.
Yanis.F

Acum puteți utiliza ts-node, , ceea ce vă face viața la fel de simplă ca

npm install -D ts-node
npm install -D typescript

ts-node script.ts

Yahya Uddin

Rețineți că dacă utilizați typings faceți următoarele:

rm -r typings
typings install

Dacă faceți tutorialul angular 2, utilizați acest lucru:

rm -r typings
npm run postinstall
npm start

dacă postinstall nu funcționează, încercați să instalați tipăririle la nivel global, astfel:

npm install -g typings

puteți încerca, de asemenea, următoarele, spre deosebire de postinstalație:

typings install

și ar trebui să rezolvați această problemă!