需要使用npm和typescript的自定义模块

时间:2015-08-26 08:50:42

标签: javascript node.js npm typescript

让我们玩2个项目:主项目 lib-project 它们都是用typescript编写的,然后使用 gulp 编译常见的javascript 我们的目标是在 main-project 中要求 lib-project

LIB-项目

>

我们已经创建了那些从他们的ts编译它们的js;让我们快速浏览一下(我们有索引,因为我们最终会想要这么多的导出)

index.ts

|-- package.json
|-- gulpfile.js
|-- dist
   |-- index.js
   |-- a.js
| src
   |-- index.ts
   |-- a.ts

a.ts

import a = require('./a');
module.exports = {A: a.A};

index.js

export class A {
  field: string;
  constructor(aField: string) {this.field = aField;}
  toString() : string {return `A: ${this.field}`;}
}

a.js

var a = require('./a');
module.exports = { A: a.A };

那是介绍;现在,我将它推送到git repo并将其作为 package.json 中的依赖并运行var A = (function () { function A(aField) { this.field = aField; } A.prototype.toString = function () { return "A: " + this.field; }; return A; })(); exports.A = A; ,我们的 main-project < / em>是:

主要项目

npm install

app.ts 中,这是失败的: |-- package.json |-- gulpfile.js |-- node_modules |--lib-project |-- dist |-- index.js |-- a.js |--node |... |--src |--app.ts

app.ts

cannot find module lib-project

我尝试了什么?

  1. 将lib-project的index.js移动到根文件夹
  2. 在package.json中,设置字段import a = require('lib-project'); var foo = new a.A('HELLO'); console.log(foo.toString());
  3. "main": "dist/index.js"
  4. import a = require('node_modules/lib-project/dist/index');
  5. tsc(打字稿编译器)的多个版本
  6. 任何帮助表示赞赏:)

    修改

    的package.json

    import a = require('../node_modules/lib-project/dist/index');

2 个答案:

答案 0 :(得分:1)

我相信你缺少的是lib项目根目录中的lib-project.d.ts文件。这将填补你在index.ts中已有的作用,但是你需要稍微调整它以填补这个角色

|-- package.json
|-- gulpfile.js
|-- lib-project.d.ts <-- formerly index.ts
|-- dist
   |-- a.js
| src
   |-- a.ts

lib-project.d.ts的位置如下:

declare module 'lib-project' {
  import a = require('./a');
  export = {A: a.A};
}

然后在消费时你可以使用:

import {A} from 'lib-project';

您可以参考我在此处为导出所做的事情:https://github.com/Brocco/ng-bridge

并导入:https://github.com/Brocco/ng-bridge-samples/blob/master/app/app.ts#L1

答案 1 :(得分:0)

您可能需要参考:TypeScript: import external module from node_modules

<强>要点: 使用tsc --module commonjs --declaration index.ts进行编译,然后在导入时使用以下内容:

/// <reference path="node_modules/lib-project/index.d.ts" />
import a = require('lib-project');