juanjoDiaz / json2csv

Flexible conversion between JSON and CSV
https://juanjodiaz.github.io/json2csv/
MIT License
296 stars 32 forks source link

Installation/runing issues with CLI #16

Closed ulucs closed 1 year ago

ulucs commented 1 year ago

json2csv version:

✗ npm info @json2csv/cli

@json2csv/cli@6.1.2 | MIT | deps: 2 | versions: 6
Command Line Interface to convert JSON to CSV.
http://juanjodiaz.github.io/json2csv

npm version:

✗ node -v
v16.14.0

There are two issues I'm having with getting json2csv-cli to run:

  1. @json2csv/transformers is not included as a dependency in@json2csv/cli, which results in the following error:
    Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@json2csv/transforms' imported from ~/.nvm/versions/node/v16.14.0/lib/node_modules/@json2csv/cli/bin/json2csv.js
    at new NodeError (node:internal/errors:371:5)
    at packageResolve (node:internal/modules/esm/resolve:930:9)
    at moduleResolve (node:internal/modules/esm/resolve:976:18)
    at defaultResolve (node:internal/modules/esm/resolve:1078:11)
    at ESMLoader.resolve (node:internal/modules/esm/loader:530:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:251:18)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:79:40)
    at link (node:internal/modules/esm/module_job:78:36) {
    code: 'ERR_MODULE_NOT_FOUND'
    }

Thankfully, this error is fixed after installing the dependency manually

  1. After I manually install @json2csv/transformers, I get the following error when trying to launch the cli:
    TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".json" for ~/.nvm/versions/node/v16.14.0/lib/node_modules/@json2csv/cli/package.json
    at new NodeError (node:internal/errors:371:5)
    at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:87:11)
    at defaultGetFormat (node:internal/modules/esm/get_format:102:38)
    at defaultLoad (node:internal/modules/esm/load:21:14)
    at ESMLoader.load (node:internal/modules/esm/loader:359:26)
    at ESMLoader.moduleProvider (node:internal/modules/esm/loader:280:58)
    at new ModuleJob (node:internal/modules/esm/module_job:66:26)
    at ESMLoader.#createModuleJob (node:internal/modules/esm/loader:297:17)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:261:34)
    at async ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:81:21) {
    code: 'ERR_UNKNOWN_FILE_EXTENSION'
    }
ulucs commented 1 year ago

I was able to sidestep the second issue by manually editing json2csv.js, removing

import pkg from '../package.json' assert { type: 'json' };

and replacing it with

import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const pkg =  require('../package.json');

as per this stackoverflow answer: https://stackoverflow.com/questions/73894591/typeerror-err-unknown-file-extension-unknown-file-extension-json . Everything appears to be working fine after this replacement

juanjoDiaz commented 1 year ago

Hi,

Thanks for reporting. I'm fixing error 1 asap.

Regarding error 2, according to the documentation, import assertions should be supported since Node 16.14.0 (see https://nodejs.org/api/esm.html#import-assertions) and it works on the automated tests (see https://github.com/juanjoDiaz/json2csv/actions/runs/4426166558/jobs/7762126078#step:8:55-332). So I'm a bit puzzle about why is not working for you.

copoer commented 1 year ago

I faced the same issue in node version v19.3.0

node:internal/errors:491
    ErrorCaptureStackTrace(err);
    ^
Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@json2csv/transforms' imported from /{$HOME}/.nvm/versions/node/v19.3.0/lib/node_modules/@json2csv/cli/bin/json2csv.js
    at new NodeError (node:internal/errors:400:5)
    at packageResolve (node:internal/modules/esm/resolve:823:9)
    at moduleResolve (node:internal/modules/esm/resolve:872:20)
    at defaultResolve (node:internal/modules/esm/resolve:1087:11)
    at nextResolve (node:internal/modules/esm/loader:161:28)
    at ESMLoader.resolve (node:internal/modules/esm/loader:834:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:415:18)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:77:40)
    at link (node:internal/modules/esm/module_job:76:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}
Node.js v19.3.0
juanjoDiaz commented 1 year ago

I just released v7.0.0 which entirely rewrites @json2csv to typescript.

Do you still see this issue there?