这个问题让我很难过.请帮忙.
我有以下文件结构:
node_modules
protractor
typescript
package.json
register-popup.ts
package.json的内容
{
"name": "typescriptProba",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"protractor": "^4.0.11",
"typescript": "^2.0.10"
}
}
register-popup.ts的内容:
import { ElementFinder, element, by } from "protractor";
export class RegisterPopup {
public registerWithFacebookButton: ElementFinder = element(by.css('li.facebook a'));
public registerWithGoogleButton: ElementFinder = element(by.css('li.google a'));
public registerWithEmailButton: ElementFinder = element(by.css('li.email a'));
public registerWithMobileButton: ElementFinder = element(by.css('li.natel a'));
constructor () {}
openPopup() {
element(by.css('.account.user')).click();
element(by.id('openRegister')).click();
}
openRegisterByEmailPopup() {
this.registerWithEmailButton.click();
}
openRegisterByPhonePopup() {
this.registerWithMobileButton.click();
}
}
为了将ts文件编译为js文件,我使用以下命令:
./node_modules/typescript/bin/tsc "./register-popup.ts" --module commonjs --noResolve --traceResolution
执行命令后,我有以下错误:
error TS2307: Cannot find module 'protractor'.
但我的模块跟踪分辨率是这样的:
======== Resolving module 'protractor' from '/Users/predraglazarevic/www/typescriptProba/register-popup.ts'. ========
Module resolution kind is not specified, using 'NodeJs'.
Loading module 'protractor' from 'node_modules' folder.
File '/Users/predraglazarevic/www/typescriptProba/node_modules/protractor.ts' does not exist.
File '/Users/predraglazarevic/www/typescriptProba/node_modules/protractor.tsx' does not exist.
File '/Users/predraglazarevic/www/typescriptProba/node_modules/protractor.d.ts' does not exist.
Found 'package.json' at '/Users/predraglazarevic/www/typescriptProba/node_modules/protractor/package.json'.
'package.json' has 'typings' field 'built/index.d.ts' that references '/Users/predraglazarevic/www/typescriptProba/node_modules/protractor/built/index.d.ts'.
File '/Users/predraglazarevic/www/typescriptProba/node_modules/protractor/built/index.d.ts' exist - use it as a name resolution result.
Resolving real path for '/Users/predraglazarevic/www/typescriptProba/node_modules/protractor/built/index.d.ts', result '/Users/predraglazarevic/www/typescriptProba/node_modules/protractor/built/index.d.ts'
======== Module name 'protractor' was successfully resolved to '/Users/predraglazarevic/www/typescriptProba/node_modules/protractor/built/index.d.ts'. ========
所以我有
Module name ‘protractor’ was successfully resolved
但仍然有错误
error TS2307: Cannot find module ‘protractor’.
为什么?
回答
当我省略–noResolve标志时,它正在工作.所以命令应该是
./node_modules/typescript/bin/tsc "./register-popup.ts" --module commonjs
最佳答案 首先,您需要检查tsconfig.json,您会看到typeRoots
{
"compileOnSave": false,
"compilerOptions": {
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [
"es2016"
],
"module": "commonjs",
"moduleResolution": "node",
"outDir": "path/to/transpiled/files",
"sourceMap": true,
"target": "es6",
"typeRoots": [
"node_modules/@types"
]
}
}
如果您有任何其他DefinitelyTyped模块,它们将被本地路径中的typeRoots目录选取:node_modules / @ types.