我是node.js和typescript的相对新手,我正在寻找用于为typescript构建自定义库的教程和示例。我目前正在开发一个项目(切换到WebStorm GUI),需要我构建几个微服务,并且几个微服务需要共享某些代码,即基本存储库功能等。我虽然会移动它们所拥有的代码。对于一系列独立的库(项目)来说是通用的,并使它们成为类型并且具有需要它们来安装它们的项目。按照我在这里找到的示例,并使用grunt:What is the story for creating and consuming TypeScript libraries?,我能够在项目的dist文件夹中生成.js文件和.d.ts文件。有几个方面我很困惑:
1)该示例引用了jsconfig文件中的“main”:“。/ did / my.service.js”部分,该文件的必要性以及应该进入的内容是什么?
2)如果所有文件都被编译并添加到dist文件夹,依赖代码是否仍然可以访问它,还是我必须将所有文件都转换为root文件?
3)在我成功完成所有文件的转换并移动到正确的位置之后,如果它们是本地的,而不是在npm或者绝对类型等等,我如何将它们安装到依赖项目中? p>
答案 0 :(得分:1)
"main" field in your package.json告诉Node的模块系统在调用require()
时需要哪个文件,所以你肯定需要它。您将该字段指向一个已转换的文件,该文件还包含对其他已转换的TypeScript文件的转换引用,因此您不必向root添加任何内容。
如果您尝试使用其他项目中的包,则只需使用NPM将其作为依赖项引用,就像使用任何其他JS项目一样。
{
"name": "dependent-project",
"dependencies": {
"bar": "file:../typescript-project"
}
}
同样,Node将知道如何加载TypeScript项目,因为您已在main
字段中指定了已转换的入口点。
答案 1 :(得分:1)
好吧,如果您希望看到我目前正在处理的示例项目,目前可以安装npm是binary-type-tree。我需要解决一些问题,但整体而言,项目运作良好。您可以在package.json中查看Jest
的设置。以及如何设置类型和主要。
根据图书馆的重点,您需要选择合适的模块系统。现在commonJS是npm包最常见的。虽然您只能使用system或amd编译为一个文件。
至于编译,你不需要gulp / grunt,你可以使用Webstorms IDE来编译你的文件。只需打开Webstorm设置"语言和框架"并选择" Typescript"你会看到启用Typescript编译器。
给出的例子非常陈旧。打字稿对2016年10月的打字工作情况进行了重大更新,他们转到了我认为的打字稿2,或者可能是11月。无论如何,当你谷歌搜索Typescript时,我会在那之前设置过滤器。
Typescript项目的package.json中的main
应该指向库的入口点或可执行文件。由于我是一个库,它指向编译文件夹的索引文件。该文件在我的仓库中不存在,但在编译时就存在了。
我认为这取决于你的构建。在我的构建中作为示例,我使用模块系统es6
,您可以在我的tsconfig.json文件中看到。这使用ES6模块系统。
如果您想使用commonjs,我的项目结构仍然可以正常工作,除非您在前端需要类似Systemjs或Babel的东西。
这个对我来说有点不为人知,但我为测试做的只是将我的目录复制到我正在处理的另一个项目的节点模块中。现在要求项目你不需要@types,因为我的tsconfig.json文件中有"declaration": true
。我项目的package.json有一个"types":
部分,指向已编译的.d.ts
文件。需要这个新TS包的项目,如果也是用TS编写的,则必须在tsconfig.json文件中包含typeRoots
和types
部分。一旦完成所有设置,您应该可以要求它就好了。
如果您的文件未编译为root,请确保在tsconfig的
includes
部分中声明所有TS文件的src。否则,您的项目必须要求使用奇怪格式的文件,例如import * as BTT from "lib/basic-node/avl-tree";
。这不是我想要的,一旦我添加它就变成了import * as BTT from 'binary-type-tree';
。
答案 2 :(得分:0)
您必须考虑以下几点:
在package.json
中,您必须设置一些内容(example):
main
属性指向您的UMD兼容包module
属性。然后,现代工作流程可以从中受益,例如应用Tree Shaking typings
指向您的.d.ts
文件(应该生成)这依赖于构建过程,可以使用模块捆绑器进行构建,例如RollupJS或Webpack。他们可以生成源地图等。
根据问题3:您可以从本地甚至从Git repos安装软件包。在package.json
中,例如:
"your-library": "git+https://github.com/alexjoverm/typescript-library-starter.git"
我建议你看看TypeScript Library Starter。你可以找到你需要的一切。它开箱即用: