Typescript模块,需要外部node_modules

时间:2015-05-15 11:56:02

标签: javascript node.js typescript

我需要在一个简单的typescript文件中使用一个简单的node_module,但似乎编译器不想得到它。

这是我的简单ts文件:

import glob = require('glob');
console.log(glob);

我有这个错误:

[13:51:11] Compiling TypeScript files using tsc version 1.5.0
[13:51:12] [tsc] > F:/SkeletonProject/boot/ts/Boot.ts(4,23): error TS2307: Cannot find external module 'glob'.
[13:51:12] Failed to compile TypeScript: Error: tsc command has exited with code:2

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: Failed to compile: tsc command has exited with code:2

npm ERR! skeleton-typescript-name@0.0.1 start: `node compile && node ./boot/js/Boot.js`
npm ERR! Exit status 8
npm ERR!
npm ERR! Failed at the skeleton-typescript-name@0.0.1 start script.

但是,当我在同一个脚本中使用一个简单的声明时,它可以工作:

var x = 0;
console.log(x); // prints  0 after typescript compilation

在这种情况下,我做错了什么?

编辑:

这是我的gulp文件:

var gulp = require('gulp');
var typescript = require('gulp-tsc');


gulp.task('compileApp', ['compileBoot'], function () {
    return gulp.src(['app/src/**/*.ts'])
        .pipe(typescript())
        .pipe(gulp.dest('app/dist/'))
});

gulp.task('compileBoot', function () {
    return gulp.src(['boot/ts/*.ts'])
        .pipe(typescript({
            module:'commonjs'
        }))
        .pipe(gulp.dest('boot/js/'))
});

gulp.start('compileApp');

感谢您提前

感谢您提前

2 个答案:

答案 0 :(得分:2)

您使用的语法正确:

import glob = require('glob');

但错误:Cannot find external module 'glob'指出您使用的是特殊情况。

默认情况下,编译器正在查找glob.ts,但在您的情况下,您使用的是节点模块,而不是您编写的模块。因此,glob模块需要特殊处理......

如果glob是一个普通的JavaScript模块,您可以添加一个名为glob.d.ts的文件,其中包含描述该模块的类型信息。

glob.d.ts

declare module "glob" {
    export class Example {
        doIt(): string;
    }
}

app.ts

import glob = require('glob');

var x = new glob.Example();

某些节点模块已在包中包含.d.ts,在其他情况下,您可以从Definitely Typed抓取它。

答案 1 :(得分:-2)

以下是您的代码错误

    import glob = require('glob');

因为在node.js中导入不是保留关键字。如果您的应用程序中需要任何模块,则只需使用语句

即可
    var glob = require('glob');

完成后,您可以使用

    console.log(glob);

要打印glob.Replacing导入的值,希望能为您完成这项工作。