打字稿编译文件找不到模块

时间:2019-05-15 13:04:22

标签: typescript

我在Typescript项目的一个文件(parser.js)中有一个导出的模块,在编译阶段我没有产生任何错误,但是编译后的文件无法工作,这让我感到困惑

yarn add node-sass
// parser.d.ts
declare module 'parser' {
    interface Parser {
        parser(url: string):string
    }

    export class UrlParser implements Parser {
        parser(url: string): string  {
            return  url.includes('https') ? url.replace('https', 'http') : '';
        }
    }
}
// parser.js
export default class UrlParser {
    parser(url)  {
        return  url.includes('https') ? url.replace('https', 'http') : '';
    }
}
/// <reference path="../lib/parser.d.ts" />
import * as Parser  from 'parser';

let urlParser = new Parser.UrlParser()
console.log(urlParser.parser('https://www.baidu.com'))

执行节点./dest/main/js命令时出现错误。

// compiled file I got
"use strict";
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
/// <reference path="../lib/parser.d.ts" />
var Parser = __importStar(require("parser"));
var urlParser = new Parser.UrlParser();
console.log(urlParser.parser('https://www.baidu.com'));

1 个答案:

答案 0 :(得分:0)

您应该在该import语句中使用相对路径(例如'./dest/lib/parser'),因为默认情况下,如果没有传递路径,require将在node_modules中查找(如TypeScript可以被告知'parser'在哪里)。

您还可以将package.json文件添加到与parser.js相同的文件夹中,其中包含内容{ name: 'parser' },这样可以通过require('parser')找到该文件