【问题标题】:Require custom module with npm and typescript需要带有 npm 和 typescript 的自定义模块
【发布时间】:2015-11-20 05:17:39
【问题描述】:

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

lib-project

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

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

index.ts

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 repo 并要求它作为 package.json 中的 dependency 并运行 npm install,我们的 main-project 是:

主项目

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

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

app.ts

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": {
  }
}

【问题讨论】:

  • 你也可以在package.json 中粘贴lib-project

标签: javascript node.js npm typescript


【解决方案1】:

您可能想参考: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');

【讨论】:

    【解决方案2】:

    我相信您缺少的是 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

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 2020-01-06
      • 2023-03-05
      • 2017-03-02
      • 2017-03-06
      • 2012-09-20
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      相关资源
      最近更新 更多