microsoft / inshellisense

IDE style command line auto complete
MIT License
8.21k stars 179 forks source link

Install binary package via common package managers (winget, brew, etc) #199

Open cpendery opened 3 months ago

cpendery commented 3 months ago

Combining #110, #32, #82, & #84 to make it easier for people to track the resolution.

As discussed in https://github.com/microsoft/inshellisense/issues/32#issuecomment-1984759946, there isn't a feasible solution yet to making the binary package that would enable distributing inshellisense via package manager. If Node 21 or Bun support gets added to node-pty, I'll retry those methods of creating the binary package. I don't want to create a dependency on any archived projects for now

alanhe421 commented 2 months ago

I've been trying to package it into brew. but have encountered an error in actual testing that hasn't been resolved yet.

The root cause of the following two errors is because node-pty is not compiled to the right version. I manually deleted @homebridge/node-pty-prebuilt-multiarch and executed npm i and it was back to normal.

My version under /usr/local/bin/node is v18.16.1.

innerError Error: Cannot find module '../build/Debug/pty.node'
Require stack:
- /opt/homebrew/Cellar/inshellisense/0.0.1-rc.13/libexec/lib/node_modules/@microsoft/inshellisense/node_modules/@homebridge/node-pty-prebuilt-multiarch/lib/prebuild-loader.js
- /opt/homebrew/Cellar/inshellisense/0.0.1-rc.13/libexec/lib/node_modules/@microsoft/inshellisense/node_modules/@homebridge/node-pty-prebuilt-multiarch/lib/unixTerminal.js
- /opt/homebrew/Cellar/inshellisense/0.0.1-rc.13/libexec/lib/node_modules/@microsoft/inshellisense/node_modules/@homebridge/node-pty-prebuilt-multiarch/lib/index.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)
    at Module._load (node:internal/modules/cjs/loader:922:27)
    at Module.require (node:internal/modules/cjs/loader:1143:19)
    at require (node:internal/modules/cjs/helpers:110:18)
    at Object.<anonymous> (/opt/homebrew/Cellar/inshellisense/0.0.1-rc.13/libexec/lib/node_modules/@microsoft/inshellisense/node_modules/@homebridge/node-pty-prebuilt-multiarch/lib/prebuild-loader.js:10:15)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
    at Module.load (node:internal/modules/cjs/loader:1119:32)
    at Module._load (node:internal/modules/cjs/loader:960:12)
    at Module.require (node:internal/modules/cjs/loader:1143:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/opt/homebrew/Cellar/inshellisense/0.0.1-rc.13/libexec/lib/node_modules/@microsoft/inshellisense/node_modules/@homebridge/node-pty-prebuilt-multiarch/lib/prebuild-loader.js',
    '/opt/homebrew/Cellar/inshellisense/0.0.1-rc.13/libexec/lib/node_modules/@microsoft/inshellisense/node_modules/@homebridge/node-pty-prebuilt-multiarch/lib/unixTerminal.js',
    '/opt/homebrew/Cellar/inshellisense/0.0.1-rc.13/libexec/lib/node_modules/@microsoft/inshellisense/node_modules/@homebridge/node-pty-prebuilt-multiarch/lib/index.js'
  ]
}
node:internal/modules/cjs/loader:1340
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: The module '/opt/homebrew/Cellar/inshellisense/0.0.1-rc.13/libexec/lib/node_modules/@microsoft/inshellisense/node_modules/@homebridge/node-pty-prebuilt-multiarch/build/Release/pty.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 120. This version of Node.js requires
NODE_MODULE_VERSION 108. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Module._extensions..node (node:internal/modules/cjs/loader:1340:18)
    at Module.load (node:internal/modules/cjs/loader:1119:32)
    at Module._load (node:internal/modules/cjs/loader:960:12)
    at Module.require (node:internal/modules/cjs/loader:1143:19)
    at require (node:internal/modules/cjs/helpers:110:18)
    at Object.<anonymous> (/opt/homebrew/Cellar/inshellisense/0.0.1-rc.13/libexec/lib/node_modules/@microsoft/inshellisense/node_modules/@homebridge/node-pty-prebuilt-multiarch/lib/prebuild-loader.js:6:11)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
    at Module.load (node:internal/modules/cjs/loader:1119:32)
    at Module._load (node:internal/modules/cjs/loader:960:12) {
  code: 'ERR_DLOPEN_FAILED'
}

Node.js v18.16.1
alanhe421 commented 2 months ago

Combining #110, #32, #82, & #84 to make it easier for people to track the resolution.

As discussed in #32 (comment), there isn't a feasible solution yet to making the binary package that would enable distributing inshellisense via package manager. If Node 21 or Bun support gets added to node-pty, I'll retry those methods of creating the binary package. I don't want to create a dependency on any archived projects for now

@cpendery For advice, what exactly do you mean by archived projects here?

cpendery commented 2 months ago

Combining #110, #32, #82, & #84 to make it easier for people to track the resolution. As discussed in #32 (comment), there isn't a feasible solution yet to making the binary package that would enable distributing inshellisense via package manager. If Node 21 or Bun support gets added to node-pty, I'll retry those methods of creating the binary package. I don't want to create a dependency on any archived projects for now

@cpendery For advice, what exactly do you mean by archived projects here?

If we migrated everything into common js, we might be able to use pkg to compile our code into a binary executable which would be easier to distribute. It handles compiling node-pty, so we could stop using the @homebrew version, but I didn't want to depend on the project since they just deprecated it in January