config icon indicating copy to clipboard operation
config copied to clipboard

Getting "Cannot find module 'ts-node'" when running with DEBUG=*

Open arodik opened this issue 6 years ago • 7 comments

ts-node is in devDependencies of @oclif/config however if I run CLI with DEBUG=* I see the following:

@oclif/config Error: Cannot find module 'ts-node'
  @oclif/config Require stack:
  @oclif/config - /Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/ts-node.js
  @oclif/config - /Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/plugin.js
  @oclif/config - /Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/config.js
  @oclif/config - /Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/index.js
  @oclif/config - /Users/arodik/projects/ffbt/node_modules/@oclif/command/lib/command.js
  @oclif/config - /Users/arodik/projects/ffbt/node_modules/@oclif/command/lib/index.js
  @oclif/config - /Users/arodik/projects/ffbt/dist/cli/entrypoint.js
  @oclif/config     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:794:15)
  @oclif/config     at Function.resolve (internal/modules/cjs/helpers.js:80:19)
  @oclif/config     at registerTSNode (/Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/ts-node.js:19:32)
  @oclif/config     at Object.tsPath (/Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/ts-node.js:77:9)
  @oclif/config     at Plugin.get commandsDir [as commandsDir] (/Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/plugin.js:68:42)
  @oclif/config     at Plugin.get commandIDs [as commandIDs] (/Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/plugin.js:70:19)
  @oclif/config     at Plugin._manifest (/Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/plugin.js:161:28)
  @oclif/config     at async Plugin.load (/Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/plugin.js:56:25)
  @oclif/config     at async Config.load (/Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/config.js:28:9)
  @oclif/config     at async Object.load (/Users/arodik/projects/ffbt/node_modules/@oclif/config/lib/config.js:334:5) +1ms

We don't use ts-node because we don't need it Our package.json

arodik avatar Oct 30 '19 13:10 arodik

Did you use the oclif generator to create a plain JS cli?

RasPhilCo avatar Nov 07 '19 00:11 RasPhilCo

No, I didn't I can try if it may help

arodik avatar Nov 07 '19 09:11 arodik

I was trying to understand how you created your cli so I can try and reproduce.

RasPhilCo avatar Nov 12 '19 18:11 RasPhilCo

I had a lot of files in the project when I decided to use OClif, so I've created the project into the separate directory via npx oclif multi mynewcli Generator settings:

? Select a package manager npm
? TypeScript Yes
? Use tslint (linter for TypeScript) No
? Use mocha (testing framework) No

Then copied files to my project

arodik avatar Nov 14 '19 10:11 arodik

I've figured out how to reproduce the issue

  • Generate new JS project
  • add tsconfig.json file
 @oclif/config reading core plugin /Users/arodik/projects/mynewcli +0ms
  @oclif/config loadJSON /Users/arodik/projects/mynewcli/package.json +0ms
  @oclif/config loadJSON /Users/arodik/projects/mynewcli/oclif.manifest.json +2ms
  @oclif/config loadJSON /Users/arodik/projects/mynewcli/.oclif.manifest.json +0ms
  @oclif/config registering ts-node at /Users/arodik/projects/mynewcli +0ms
  @oclif/config Error: Cannot find module 'ts-node'
  @oclif/config Require stack:
  @oclif/config - /Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/ts-node.js
  @oclif/config - /Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/plugin.js
  @oclif/config - /Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/config.js
  @oclif/config - /Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/index.js
  @oclif/config - /Users/arodik/projects/mynewcli/node_modules/@oclif/command/lib/command.js
  @oclif/config - /Users/arodik/projects/mynewcli/node_modules/@oclif/command/lib/index.js
  @oclif/config - /Users/arodik/projects/mynewcli/bin/run
  @oclif/config     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:772:15)
  @oclif/config     at Function.resolve (internal/modules/cjs/helpers.js:74:19)
  @oclif/config     at registerTSNode (/Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/ts-node.js:19:32)
  @oclif/config     at Object.tsPath (/Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/ts-node.js:77:9)
  @oclif/config     at Plugin.get commandsDir [as commandsDir] (/Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/plugin.js:68:42)
  @oclif/config     at Plugin.get commandIDs [as commandIDs] (/Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/plugin.js:70:19)
  @oclif/config     at Plugin._manifest (/Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/plugin.js:161:28)
  @oclif/config     at async Plugin.load (/Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/plugin.js:56:25)
  @oclif/config     at async Config.load (/Users/arodik/projects/mynewcli/node_modules/@oclif/config/lib/config.js:28:9)

tsconfig is located at the root of the project because the project is written on Typescript, but I didn't install ts-node because I don't need it. I compile all into the dist directory and start OClif as a usual nodejs app

arodik avatar Nov 14 '19 16:11 arodik

Ah, gotcha. We assume if there is a tsconfig.json file in root you are running a typescript project.

RasPhilCo avatar Dec 05 '19 18:12 RasPhilCo

I think it's OK to skip ts-node if the script can't find it in dependencies :) I can try to make a PR with a fix

arodik avatar Dec 05 '19 21:12 arodik