我正在尝试在 TypeScript 中导入我的 package.json 文件,但它似乎不起作用。具体来说,我只是尝试导入它,以便可以访问日志语句的名称和版本属性。就像是:
import * as pjson from '../package.json';
// other code here
log.info(`${pjson.name}:${pjson.version}` started on port ...);
我们在使用 Node/Babel 的其他项目中的其他地方也有相同的语法,但我试图围绕这些部分引入一些 TypeScript。在其他地方我们会做类似的事情:
import { name, version} from '../package.json';
但这在这里不起作用。我按照以下说明进行操作https://www.npmjs.com/package/json-d-ts https://www.npmjs.com/package/json-d-ts这至少使我的导入语句中的错误消失了,但现在当我尝试访问属性时,出现以下错误:
src/index.ts(20,21): error TS2339: Property 'name' does not exist on type 'typeof import("*.json")'.
src/index.ts(20,35): error TS2339: Property 'version' does not exist on type 'typeof import("*.json")'.
有没有办法解决这个问题,或者我只需要在某个地方硬编码这些值(而不是从 package.json 动态检索它们)?也许我可以声明一个类型import("*.json")
以某种方式定义了这些属性吗?
如何导入 *.json ?
正如已经回答的那样,您需要 Typescript >= 2.9 以及以下设置tsconfig.json
:
{
"resolveJsonModule": true,
"esModuleInterop": true,
"module": "commonjs"
}
但也有限制:
- 您必须编译为 CommonJS
- 您导入的所有 JSON 都必须位于
"rootDir"
不幸的是"rootDir"
通常是一个文件夹beneathpackage.json 像“./src”一样,事情就会失败。
So:
如何导入package.json?
你可以require
it:
const pjson = require('../package.json')
;
如果您使用 npm.start:你不需要: https://docs.npmjs.com/misc/scripts#packagejson-vars
package.json 字段附加到 npm_package_ 前缀上。因此,例如,如果您的 package.json 文件中有 {"name":"foo", "version":"1.2.5"} ,那么您的包脚本会将 npm_package_name 环境变量设置为“foo”,并将 npm_package_version 设置为“1.2.5”。您可以使用 process.env.npm_package_name 和 process.env.npm_package_version 访问代码中的这些变量,对于其他字段,依此类推。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)