Tyl*_*son 6 json typescript package.json
使用 Typescript 2.9 我能够成功导入本地 package.json 文件并使用这些值。但是,当我只想生成的 JS 文件使用实际的 package.json 时,我现在遇到了 package.json 文件包含在编译输出中的问题。
我的包有以下文件:
src/
index.ts
package.json
tsconfig.json
Run Code Online (Sandbox Code Playgroud)
我的 index.ts 导入 package.json:
import pkg = require("../package.json");
Run Code Online (Sandbox Code Playgroud)
我的 tsconfig.json 看起来像这样:
{
"compilerOptions": {
"outDir": "./lib",
"module": "commonjs",
"resolveJsonModule": true,
"esModuleInterop": true
},
"include": [
"src/**/*"
]
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,结果是:
lib/
index.js
package.json
Run Code Online (Sandbox Code Playgroud)
但是我实际得到的是:
lib/
src/
index.js
package.json
package.json
Run Code Online (Sandbox Code Playgroud)
我正在使用 TypeScript 3.5.1,如果我使用该require()函数导入 package.json,那么它不会复制到编译输出中,因此输出看起来像您的理想结果。
我的 tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"lib": ["es2015", "dom"],
"sourceMap": true,
"strict": true,
"moduleResolution": "node",
"downlevelIteration": true
"outDir": "./ts-out",
"noImplicitAny": false,
"suppressImplicitAnyIndexErrors": false
},
"include": [
"./src"
]
}
Run Code Online (Sandbox Code Playgroud)
我只是像这样导入它:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"lib": ["es2015", "dom"],
"sourceMap": true,
"strict": true,
"moduleResolution": "node",
"downlevelIteration": true
"outDir": "./ts-out",
"noImplicitAny": false,
"suppressImplicitAnyIndexErrors": false
},
"include": [
"./src"
]
}
Run Code Online (Sandbox Code Playgroud)
我在 Facebook 的 Jest 框架源代码中找到了这个解决方案(他们使用的是 Lerna + TypeScript):https : //github.com/facebook/jest/blob/master/packages/jest-core/src/version.ts
你想要一些有些矛盾的东西:
\npackage.json,这意味着您将其视为来源outDir源代码中rootDir项目根目录而不是src根目录时会发生的情况,这是使 import 语句起作用的唯一方法。如果您按逻辑将项目分解为单独的子项目,那么这些矛盾就不再是矛盾。您将需要 Typescript 3 的新项目引用功能。
\n我们将把包含src的目录和根目录视为package.json单独的项目。每个都有自己的tsconfig文件:
为该src目录提供自己的项目。
./src/tsconfig.json:
{\n "compilerOptions": {\n "rootDir": ".",\n "outDir": "../lib/",\n "resolveJsonModule": true\n },\n "references": [ // this is how we declare a dependency from\n { "path": "../" } // this project to the one at the root dir`\n ]\n }\nRun Code Online (Sandbox Code Playgroud)\n为根目录提供自己的项目。
\n./tsconfig.json:
{\n "compilerOptions": {\n "rootDir": ".",\n "outDir": ".", // if out path for a file is same as its src path, nothing will be emitted\n "resolveJsonModule": true,\n "composite": true // required on the dependency project for references to work\n },\n "files": [ // by whitelisting the files to include, TS won\'t automatically\n "package.json" // include all source below root, which is the default.\n ]\n }\nRun Code Online (Sandbox Code Playgroud)\n因为对于根子项目来说,输出是同一个目录,并且源路径和输出路径最终是package.json相同的,tsc所以不会做任何事情......实际上是无操作。
跑步tsc --build src并破坏\xc3\xa0!结果将是:
lib/\n index.js\n package.json\nRun Code Online (Sandbox Code Playgroud)\n当我只想生成的 JS 文件使用实际的 package.json 时。
如果您的 src 文件结构lib始终是直接副本。如果您包含package.json到 TypeScript 编译上下文中,那么它会将您的 lib 更改为package.json + src.
如何将 package.json 导入 Typescript 文件而不将其包含在编译的输出中?
如果你导入的话就不能。
有两个项目,如本答案所述:https ://stackoverflow.com/a/61468012/390330
| 归档时间: |
|
| 查看次数: |
3542 次 |
| 最近记录: |