如何在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" } 

然后我运行:

 npm install npm run tsc 

但是,当我运行第二个命令我得到很多错误,它不能显示所有它。 其中大部分如下所示:

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

在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 ] 

请注意,删除软件包,然后安装打字稿全局解决了这个问题。 但是,如果我然后使用npm安装再次安装本地包,它会重新引入此问题。

要将项目中的TypeScript作为开发依赖项安装,可以使用--save-dev密钥

 npm install --save-dev typescript 

它也将打字稿写入你的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" ] } 

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

我花了一段时间才弄清楚这个问题的解决办法 – 这是原来的问题。 你需要有一个script ,在你的package.json文件中调用tsc ,以便你可以运行:

 npm run tsc 

包括--在传递选项之前(或者将其包含在脚本中):

 npm run tsc -- -v 

这是一个package.json的例子:

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

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

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

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

tsc需要一个configuration文件或.ts(x)文件来编译。

要解决您的两个问题, tsconfig.json使用以下内容创build一个名为tsconfig.json的文件:

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

另外,用这个修改你的npm运行

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

请注意,如果您正在使用types,请执行以下操作:

 rm -r typings typings install 

如果你做angular2教程使用这个:

 rm -r typings npm run postinstall npm start 

如果postinstall命令不起作用,请尝试在全局安装types,如下所示:

 npm install -g typings 

你也可以尝试以下,而不是安装后:

 typings install 

你应该解决这个问题!