我的 node 版本为v14.17.4 系统版本为macos bigsur 11.6 在准备发布一个自己配置的 cli 项目时遇到了一个问题,就是当我使用common.js规范引入node_modules文件

const program = require("commander");
const download = require("download-git-repo");
const inquirer = require("inquirer");
const ora = require("ora");
const chalk = require("chalk");
const packageData = require("./package.json");
const fs = require("fs");
const path = require("path");

执行命令 test -V, 结果控制台报了一个错

ReferenceError: require is not defined in ES module scope, you can use import instead
This file is being treated as an ES module because it has a '.js' file extension and '/Users/xxx//package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.at file:///Users/xxx/cli-demo/index.js:4:17at ModuleJob.run (internal/modules/esm/module_job.js:170:25)at async Loader.import (internal/modules/esm/loader.js:178:24)at async Object.loadESM (internal/process/esm_loader.js:68:5)

根据报错提示,我进行了修改,在package.json 文件里添加了 "type": "module"这个配置项,并把node_modules 的引入改成了

import program from "commander";
import download from "download-git-repo";
import inquirer from "inquirer";
import ora from "ora";
import chalk from "chalk";
import packageJson from "./package.json";
import fs from "fs";
import path from "path";

但是新的问题又出现了,报了下面这个错

internal/process/esm_loader.js:74internalBinding('errors').triggerUncaughtException(^TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".json" for /Users/lixue/code_boy/vue_product/cli-demo/package.jsonat Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:71:15)at Loader.getFormat (internal/modules/esm/loader.js:105:42)at Loader.getModuleJob (internal/modules/esm/loader.js:243:31)at async ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:75:21)at async Promise.all (index 5)at async link (internal/modules/esm/module_job.js:80:9) {code: 'ERR_UNKNOWN_FILE_EXTENSION'
}

大概意思就是说没有识别出我这样引入的的 package.json 文件。去查阅了一下 nodejs 文档内 fs.directory 这个api的使用方法,文档说明如下

fs.readFileSync(path[, options])path <string> | <Buffer> | <URL> | <integer> 文件名或文件描述符
options <Object> | <string>
encoding <string> | <null> 默认值: null
flag <string> 请参阅对文件系统 flags 的支持。 默认值: 'r'。
返回: <string> | <Buffer>
返回 path 的内容。有关详细信息,请参阅此 API 的异步版本的文档:fs.readFile()。如果指定了 encoding 选项,则此函数返回字符串。 否则它返回缓冲区。与 fs.readFile() 类似,当路径为目录时,fs.readFileSync() 的行为是特定于平台的。

可以这样引入

const packageJsonData = JSON.parse(fs.readFileSync('package.json', 'utf8'))
// 由于 fs.readFileSync 返回的是json 字符串,所以用parse转成对象形式
// 可以用 packageJsonData.name 的调用方式 获取当前 package.json 内name的值

至此问题得到解决。

nodejs 中读取 package.json 文件内容相关推荐

  1. node.js 中的package.json文件怎么创建?

    最近在用webstorm和nodejs做一些东西,老是各种混乱,今天上午创建一个新的项目,结果发现,npm init之后,并没有出现package.json,并没有太明确他的功能的小姑娘表示十分的惊慌 ...

  2. Node.js中创建package.json文件,安装第三方包

    在当前项目根目录下打开命令窗口 输入,开启安装向导 npm init 依次输入之后即可生成package.json文件,也可以不完全填写全部信息,不想填的回车可跳过. package name: (包 ...

  3. Nodejs系列之package.json文件

    文章の目录 1.node_modules文件夹的问题 2.package.json文件的作用 3.项目依赖 4.开发依赖 5.package-lock.json文件的作用 写在最后 1.node_mo ...

  4. python读文件缺key_在Python中读取Twitter json文件时出现KeyErrors

    我试图用我从twitter收集的数据分析一个json文件,但是当我试图搜索一个关键字时,它说找不到,但是我可以看到它在那里.我试了两种不同的方法.我会把它们贴在下面.任何建议都很好.在 尝试1:imp ...

  5. 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session

    1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...

  6. VScode 插件中 package.json 文件字段详解

    一.package.json文件内容 {// 插件的名字,应全部小写,不能有空格: string"name": "my-vscode-plugin",// 版本 ...

  7. package.json文件详解

    目录 前言 一.package.json 文件作用 二.package.json 文件创建 三.package.json 文件示例 四.package.json 文件配置说明 前言 随着前端由多页面到 ...

  8. java如何引用文件_java 中如何引用json文件

    java如何创建Json文件?每次做题前,小编都会先潇洒的写下一个解字,然后开始看题-- 新建json文件放在服务器指定目录下,然后读取和写入信息. 小编是想把讨论世界上最可怕的事情,莫过于有眼睛却发 ...

  9. package.json文件是个什么东东?

    package.json文件 一.node_modules文件夹的问题 文件夹以及文件过多过碎,当我们将项目整体拷贝给别人的时候,,传输速度会很慢很慢. 复杂的模块依赖关系需要被记录,确保模块的版本和 ...

  10. 有没有办法从nodejs代码中的package.json获取版本?

    本文翻译自:Is there a way to get version from package.json in nodejs code? Is there a way to get the vers ...

最新文章

  1. python判断网页密码加密方式_python实现网页登录时的rsa加密流程
  2. 使用伪指令#pragma pack
  3. 高并发编程-捕获线程运行时的异常 + 获取调用链
  4. 有监督学习和无监督学习举例_对比自监督学习
  5. 企业局域网内如何跨网安全传输数据
  6. 安卓学习笔记:使用PopupWindow创建简单菜单
  7. eclipse断点Source not found解决方案1,2,3
  8. CentOS 编译 Nginx 服务
  9. PAT 1086 就不告诉你
  10. U-Boot工作过程
  11. 在consul上注册web服务
  12. ztree 右键菜单功能
  13. Win 10间歇性卡顿问题
  14. Android ScrollView 长截屏
  15. 逆水寒2021最新服务器,逆水寒公布2021部分更新计划,写满了离经叛道
  16. 那村的人儿(村长)第十期数码照片后期处理全套培训教程
  17. [论文总结] 种群、保护与生态遗传学笔记
  18. 学钢琴时如何提高识谱能力
  19. 论文查重相似度如何判断?
  20. mysql8 设置binlog过期时间

热门文章

  1. (基础篇)用python实现打印节日贺卡
  2. Halcon union_adjacent_contours_xld详解
  3. 微信小程序实现类似微信提现、支付宝提现充值等 “自定义键盘“可实现自定义右下角搜索内容,手写input功能view组件,实现焦点获取事件
  4. 电商 购物车-订单-支付流程
  5. 管理类联考-英语: 前导( 三 )
  6. Angular之生命周期函数
  7. 基于Python制作的一个打砖块小游戏
  8. 用svg矢量图实现动画效果
  9. 一张图看明白云计算数据中心总体分层架构
  10. School Regional Team Contest, Saratov, 2011-F. Spiders-求树直径