如何在npm中本地安装和运行Typescript?

Yah*_*din 32 node.js npm typescript

我想安装并运行Typescript(即没有全局依赖).

这是我的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"
}
Run Code Online (Sandbox Code Playgroud)

然后我跑:

npm install
npm run tsc
Run Code Online (Sandbox Code Playgroud)

但是,当我运行第二个命令时,我得到很多错误,它无法显示所有错误.大部分内容如下:

../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'.
Run Code Online (Sandbox Code Playgroud)

在npm-debug.log中我得到:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/nodejs', '/usr/bin/npm', 'run', 'tsc' ]
2 info using npm@3.10.2
3 info using node@v5.12.0
4 verbose run-script [ 'pretsc', 'tsc', 'posttsc' ]
5 info lifecycle foo@1.0.0~pretsc: foo@1.0.0
6 silly lifecycle foo@1.0.0~pretsc: no script for pretsc, continuing
7 info lifecycle foo@1.0.0~tsc: foo@1.0.0
8 verbose lifecycle foo@1.0.0~tsc: unsafe-perm in lifecycle true
9 verbose lifecycle foo@1.0.0~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 foo@1.0.0~tsc: CWD: /home/vagrant/foo
11 silly lifecycle foo@1.0.0~tsc: Args: [ '-c', 'tsc' ]
12 silly lifecycle foo@1.0.0~tsc: Returned: code: 2  signal: null
13 info lifecycle foo@1.0.0~tsc: Failed to exec tsc script
14 verbose stack Error: foo@1.0.0 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 foo@1.0.0
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 foo@1.0.0 tsc: `tsc`
22 error Exit status 2
23 error Failed at the foo@1.0.0 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 ]
Run Code Online (Sandbox Code Playgroud)

请注意,删除程序包然后全局安装typescript可以解决问题.但是,如果我再使用npm install再次安装本地软件包,则会重新引入该问题.

ube*_*kel 36

我花了一段时间才弄清楚这个问题的解决方案 - 这是在原始问题中.您需要在文件script中调用tsc,package.json以便运行:

npm run tsc 
Run Code Online (Sandbox Code Playgroud)

--在传入选项之前包含(或者只是将它们包含在脚本中):

npm run tsc -- -v
Run Code Online (Sandbox Code Playgroud)

这是一个例子package.json:

{
  "name": "foo",
  "scripts": {
    "tsc": "tsc"
  },
  "dependencies": {
    "typescript": "^1.8.10"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 谷歌的难题!适用于cli软件包,建议您在全局安装它,但只想在本地使用它们,谢谢! (3认同)
  • 为什么要在“dependencies”而不是“devDependencies”下安装开发工具? (2认同)

Mik*_*ail 26

要在项目中将TypeScript本地安装为开发依赖项,可以使用--save-devkey

npm install --save-dev typescript
Run Code Online (Sandbox Code Playgroud)

它还将打字稿写入您的 package.json

您还需要一个tsconfig.json文件.例如

{
  "compilerOptions": {
    "target": "ES5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules",
    ".npm"
  ]
}
Run Code Online (Sandbox Code Playgroud)

有关tsconfig的更多信息,请参阅http://www.typescriptlang.org/docs/handbook/tsconfig-json.html


Fau*_*ust 24

从npm 5.2.0开始,通过

npm i typescript --save-dev
Run Code Online (Sandbox Code Playgroud)

...您不再需要- 的scripts部分,package.json现在可以使用npx运行编译器:

npx tsc
Run Code Online (Sandbox Code Playgroud)

现在,您不必每次要使用不同的参数进行编译时都更新package.json文件。

  • 如果需要轻量级,最小配置的本地项目解决方案,`npx tsc`绝对是必经之路。它甚至可以在不使用`npm i`的情况下用于不经常运行的命令,尽管如果不先运行`npm i`,则`npx`每次都需要将必要的软件包安装到temp文件夹中。有关npx的更多信息,请访问:https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b (2认同)
  • 这就是我的答案! (2认同)

Yan*_*s.F 9

您现在可以使用ts-node,这使您的生活变得简单

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

ts-node script.ts
Run Code Online (Sandbox Code Playgroud)


Jim*_*yle 7

您需要告诉npm"tsc"作为本地项目包存在(通过package.json中的"scripts"属性),然后通过它运行npm run tsc.要做到这一点(至少在Mac上)我必须在包中添加实际编译器的路径,就像这样

{
  "name": "foo"
  "scripts": {
    "tsc": "./node_modules/typescript/bin/tsc"
  },
  "dependencies": {
    "typescript": "^2.3.3",
    "typings": "^2.1.1"
  }
}
Run Code Online (Sandbox Code Playgroud)

之后,您可以运行任何TypeScript命令npm run tsc -- --init(参数在第一个之后--).