Vik*_*alk 12 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"
}
Run Code Online (Sandbox Code Playgroud)
如果我然后并行开发一个依赖于此模块的模块,npm link
例如vscode中的代码导航会让我跳转到这个定义文件中.这不是我想要的.
我想进入源文件,以便能够在dep中并行编辑.在这方面没有内联或无内联的tsconfig设置有帮助.我可能会在这里遗漏一些东西.我管理我的工作流程以正常工作的唯一方法是实际指向源main.ts文件:
{
"name": "awesome",
"author": "Vandelay Industries",
"version": "1.0.0",
"main": "./lib/main.js",
"types": "./src/main.ts"
}
Run Code Online (Sandbox Code Playgroud)
然而,这会在发布时让事情破裂吗?
至少如果我把src放在.npmignore下面.我无法理解使用多个打字稿模块获得良好工作流程的最佳方法.
我的意思是,我不想将package.json作为发布过程的一部分进行修改......?
Sha*_*tin 19
据我所知,TypeScript项目参考将满足您的要求:
*.ts
源文件而不是*.d.ts
文件。types
值引用该*.d.ts
文件。这提供了开发人员工具,而无需更改您发布的方式/内容。
我在 GitHub 中创建了一个简单的演示项目。以下是如何使用代码导航设置项目引用的要点。
tsconfig.json 允许另一个 TypeScript 项目引用它 ( composite
) 并允许代码导航工作 ( declarationMap
)。在 package.json 中,NPM 作用域 ( @shaunluttin
) 不是完全必要的;我包括它以避免命名冲突。
配置文件
{
"compilerOptions": {
"target": "es5",
"composite": true,
"declarationMap": true
}
}
Run Code Online (Sandbox Code Playgroud)
包.json
{
"name": "@shaunluttin/package01",
"version": "1.0.0",
"main": "index.js",
"types": "index.d.ts"
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.jsonreferences
包 01。这就是设置工具的原因。package.json 以与通常相同的方式依赖于 package01。
配置文件
{
"compilerOptions": {
"target": "es5"
},
"references": [
{
"path": "../package01"
}
]
}
Run Code Online (Sandbox Code Playgroud)
包.json
{
"name": "@shaunluttin/package02",
"version": "1.0.0",
"main": "index.js",
"types": "index.d.ts",
"dependencies": {
"@shaunluttin/package01": "1.0.0"
}
}
Run Code Online (Sandbox Code Playgroud)
对于本地开发,这两个包通过npm link
.
cd package01
npm link
cd ../package01
npm link @shaunluttin/package01
Run Code Online (Sandbox Code Playgroud)
该文档提到了一些过于复杂而无法在此答案中列出的警告。
这是一个更轻量级的替代方案,但它需要使用 PNPM。在您的 package02 中,将其添加到您的 package.json 中:
...
"type": "module",
"exports": {
".": "./src/index.ts"
},
"types": "./src/index.ts",
"publishConfig": {
"exports": {
".": "./lib/index.js"
},
"types": "./lib/index.d.ts"
},
...
Run Code Online (Sandbox Code Playgroud)
当您的包发布时,这些publishConfig
选项将覆盖 src 中的开发引用。请注意,我正在使用此解决方案构建 ESM 包。不确定CJS。