需要带有 npm 和 typescript 的自定义模块
Posted
技术标签:
【中文标题】需要带有 npm 和 typescript 的自定义模块【英文标题】:Require custom module with npm and typescript 【发布时间】:2015-11-20 05:17:39 【问题描述】:让我们玩两个项目:main-project 和 lib-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());
我尝试了什么?
-
将 lib-project 的 index.js 移至根文件夹
在package.json中,设置字段
"main": "dist/index.js"
import a = require('node_modules/lib-project/dist/index');
import a = require('../node_modules/lib-project/dist/index');
多个版本的 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
【参考方案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
【讨论】:
以上是关于需要带有 npm 和 typescript 的自定义模块的主要内容,如果未能解决你的问题,请参考以下文章
带有 Typescript 错误 TS18003 的 Npm 服务器
使用带有 TypeScript 的 Bootstrap 和 jQueryUI - 获取 (TS) 重复属性“工具提示”