如何在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
你应该解决这个问题!
- testing失败:ReferenceError:SpeechSynthesisUtterance未定义
- 防止ts文件被发送
- 在“module”全局variables上运行grunt-typescript时,angular-mock和node.js发生冲突
- Typescript:从另一个模块的类中添加一个方法/从不同模块填充一个名称空间
- 续集连接和日志logging问题
- 用于存储与PHP $ _sessionvariables相同的Angular session值的variables
- 节点jsnetworking库 – 获取有关客户端(套接字)
- Typescript Interface vs
- 无法使用NPM安装TypeScript