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

我想要安装和运行类型脚本(即没有全局依赖)。

这是我的 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 install 再次安装本地软件包,就会重新引入问题。

154435 次浏览

要在项目中将 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

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

为了解决这两个问题,创建一个名为 tsconfig.json的文件,其内容如下:

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

另外,使用以下命令修改 npm 运行

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

注意,如果使用 typings,请执行以下操作:

rm -r typings
typings install

如果你在做角度2的教程,可以这样做:

rm -r typings
npm run postinstall
npm start

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

npm install -g typings

您也可以尝试以下方法,而不是 postinstall:

typings install

你应该解决这个问题!

我花了一段时间才找到解决这个问题的办法——它在最初的问题中。您需要在 package.json文件中有一个调用 tscscript,这样您就可以运行:

npm run tsc

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

npm run tsc -- -v

下面是 package.json的一个例子:

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

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

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

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

从 npm 5.2.0开始,一旦通过

npm i typescript --save-dev

... 您不再需要 package.jsonscripts部分中的条目——您现在可以使用 Npx运行编译器:

npx tsc

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

您现在可以使用 T-node,它使您的生活简单如下

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


ts-node script.ts