什么放在package.json类型字段中的基于打字稿的库

时间:2018-02-23 16:29:01

标签: typescript visual-studio-code

我对如何最好地与代码导航并行开发多个打字稿模块以及仍以正确的方式发布有点困惑。那么我应该把它放在package.json" types"场?

根据:Typescriptlang.org/publishing.html

我应该像我这样引用我生成的index.d.ts

{
    "name": "awesome",
    "author": "Vandelay Industries",
    "version": "1.0.0",
    "main": "./lib/main.js",
    "types": "./lib/main.d.ts"
}

如果我然后并行开发一个依赖于npm link的模块的模块,例如vscode中的代码导航会让我跳转到这个定义文件。这不是我想要的。

我想进入源文件,以便能够在dep中并行编辑。在这方面没有内联或无内联的tsconfig设置有帮助。我可能会在这里遗漏一些东西。我管理工作流程的唯一方法就是实际指向源main.ts文件:

{
    "name": "awesome",
    "author": "Vandelay Industries",
    "version": "1.0.0",
    "main": "./lib/main.js",
    "types": "./src/main.ts"
}

然而,这会在发布时让事情破裂吗?

至少我把src放在.npmignore下面。我没有理解使用多个打字稿模块获得良好工作流程的最佳方法。

我的意思是,作为发布过程的一部分,我不想破坏package.json ......?

1 个答案:

答案 0 :(得分:0)

TypeScript项目参考

据我所知,TypeScript Project References 将满足您的要求:

  • VS代码导航转到*.ts源文件,而不是*.d.ts文件。
  • package.json types值引用*.d.ts文件。

这提供了开发人员工具,而无需更改您的发布方式。

演示

我创建了一个简单的demo project in GitHub。这是如何通过代码导航设置项目引用的重点。

package01

tsconfig.json允许另一个TypeScript项目引用它(composite),并使代码导航正常工作(declarationMap)。在package.json中,NPM范围(@shaunluttin)并不是完全必要的。我将其包括在内以避免命名冲突。

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "composite": true,
    "declarationMap": true
  }
}

package.json

{
  "name": "@shaunluttin/package01",
  "version": "1.0.0",
  "main": "index.js",
  "types": "index.d.ts"
}

package02

tsconfig.json references package01。这就是设置工具的原因。 package.json与package01的依赖方式相同。

tsconfig.json

{
  "compilerOptions": {
    "target": "es5"
  },
  "references": [
    {
      "path": "../package01"
    }
  ]
}

package.json

{
  "name": "@shaunluttin/package02",
  "version": "1.0.0",
  "main": "index.js",
  "types": "index.d.ts",
  "dependencies": {
    "@shaunluttin/package01": "1.0.0"
  }
}

NPM链接

对于本地开发,这两个软件包是connected with npm link

cd package01
npm link

cd ../package01
npm link @shaunluttin/package01

最终思想

The documentation提到了一些需要注意的警告,因此无法在此答案中列出。