使用 NodeJS 从 package.json 获取名称属性



我想知道 NodeJs 中是否有办法从我的项目package.json文件中获取 name 属性:

{
"name": "bendiciones",
"version": "1.12.0",
"description": " bendiciones",
"main": "main.js",
"scripts": {
...
}

我试过

import {name} from './package.json';
import {name} from './app.json'

但我得到了错误:

TS2307: Cannot find module './package.json'.
TS2307: Cannot find module './app.json'.

我也尝试过:

console.log ('--2>', process.env.npm_package_name);

但我得到undefined

我也有类似的问题。作为解决方案,您应该添加一个自定义类型,即 与内容json-loader.d.ts

declare module "*.json" {
const value: any;
export default value;
}

如果您使用的是 TypeScript,这很容易:

import pkg from '../path/to/package.json';
pkg.name;

它确实需要tsconfig.json中的以下compilerOptions

{
"compilerOptions": {
"module": "commonjs",
"resolveJsonModule": true,
"esModuleInterop": true
}
}

您可以require整个文件并选择所需的任何属性:

const packageJSON = require("path/to/your/package.json");
console.log(packageJSON.name);

我也想做同样的事情,这是有效的代码。由于它使用require来加载package.json,因此无论当前工作目录如何,它都可以工作。

var packageFile = require('./package.json');
console.log(packageFile);

警告:

请注意不要向客户端公开package.json,因为这意味着所有依赖项版本号、生成和测试命令等都将发送到客户端。
如果在同一项目中构建服务器和客户端,则也会公开服务器端版本号。 攻击者可以使用此类特定数据来更好地适应服务器上的攻击。

如果你使用的是没有加载器的纯Javascript,你必须手动加载package.json文件:

import { readFileSync } from "fs";
// ./package.json is relative to the current file
const packageJsonPath = require.resolve("./package.json");
const packageJsonContents = readFileSync(packageJsonPath).toString();
const packageJson = JSON.parse(packageJsonContents);
console.log(packageJson.name);

最新更新