这个问题让我很难过.请帮忙.
我有以下文件结构:
我有以下文件结构:
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(); } }
./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.