我想知道 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);