繁体   English   中英

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

[英]Require custom module with npm and typescript

让我们玩两个项目: main-projectlib-project都用打字稿编写,然后使用gulp编译为通用javascript。
我们的目标是在main-project中需要lib -project

lib项目

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

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

索引

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

a.ts

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

index.js

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

a.js

var A = (function () {
    function A(aField) {
        this.field = aField;
    }
    A.prototype.toString = function () {
        return "A: " + this.field;
    };
    return A;
})();
exports.A = A;

那是介绍; 现在,我将其推送到git仓库,并在package.json中将其作为依赖项 ,然后运行npm install ,我们的主要项目是:

主项目

|-- package.json
|-- gulpfile.js
|-- node_modules
    |--lib-project
       |-- dist
         |-- index.js
         |-- a.js
    |--node
       |...
 |--src
    |--app.ts

app.ts中失败了: cannot find module lib-project

应用程序

import a = require('lib-project');
var foo = new a.A('HELLO');
console.log(foo.toString());

我尝试了什么?

  1. 将lib-project的index.js移到根文件夹
  2. 在package.json中,将字段设置为"main": "dist/index.js"
  3. import a = require('node_modules/lib-project/dist/index');
  4. import a = require('../node_modules/lib-project/dist/index');
  5. tsc的多个版本(打字稿编译器)

任何帮助表示赞赏:)


编辑

package.json

{
  "name": "lib-project",
  "version": "0.1.0",
  "description": "description here",
  "main": "dist/index.js",
  "scripts": {},
  "author": "",
  "license": "MIT",
  "dependencies": {
  }
}

我相信您所缺少的是lib-project.d.ts根目录中的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

您可能要参考: TypeScript:从node_modules导入外部模块

要点:使用tsc --module commonjs --declaration index.ts编译,然后在导入时使用以下命令:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM