ether / etherpad-lite

Etherpad: A modern really-real-time collaborative document editor.
http://docs.etherpad.org/
Apache License 2.0
16.08k stars 2.79k forks source link

Unknown file extension ".ts" for server.ts #6269

Closed meaz closed 1 month ago

meaz commented 2 months ago

Describe the bug When running etherpad, I get Unknown file extension ".ts" for /path/to/etherpad-lite/src/node/server.ts

To Reproduce Steps to reproduce the behavior:

  1. Install Git and Node.js
  2. Git clone repo
  3. Run bin/run.sh
  4. See error

Error I get

root@debian:/path/to/etherpad-lite/ # sudo -u etherpaduser bin/run.sh 
Installing dependencies...
Installing dev dependencies with pnpm
Scope: all 4 workspace projects
Lockfile is up to date, resolution step is skipped
.                                        | +743 +++++++++++++++++++++++++++++++++++++
Downloading registry.npmjs.org/typescript/5.4.2: 5.82 MB/5.82 MB, done
Downloading registry.npmjs.org/@swc/core-linux-x64-musl/1.4.7: 20.37 MB/20.37 MB, done
Downloading registry.npmjs.org/@swc/core-linux-x64-gnu/1.4.7: 16.42 MB/16.42 MB, done
Progress: resolved 743, reused 0, downloaded 743, added 743, done
node_modules/.pnpm/@swc+core@1.4.7/node_modules/@swc/core: Running postinstall script..node_modules/.pnpm/@swc+core@1.4.7/node_modules/@swc/core: Running postinstall script, node_modules/.pnpm/esbuild@0.19.12/node_modules/esbuild: Running postinstall script, done in 109ms
Done in 12.7s
Clearing minified cache...
Creating the admin UI...

> admin@2.0.1 build /path/to/etherpad-lite/admin
> tsc && vite build

vite v5.1.6 building for production...
✓ 1626 modules transformed.
../src/templates/admin/index.html                   0.49 kB │ gzip:   0.30 kB
../src/templates/admin/assets/index-DxlhTx9-.css    9.20 kB │ gzip:   2.78 kB
../src/templates/admin/assets/index-Cv1HbGYr.js   402.35 kB │ gzip: 128.90 kB
[vite-plugin-static-copy] Copied 1 items.
✓ built in 7.82s
Starting Etherpad...

> etherpad@2.0.1 dev /path/to/etherpad-lite/
> pnpm --filter ep_etherpad-lite run dev

> ep_etherpad-lite@2.0.1 dev /path/to/etherpad-lite/src
> node --import tsx node/server.ts

node:internal/errors:496
    ErrorCaptureStackTrace(err);
    ^

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /path/to/etherpad-lite/src/node/server.ts
    at __node_internal_captureLargerStackTrace (node:internal/errors:496:5)
    at new NodeError (node:internal/errors:405:5)
    at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:99:9)
    at defaultGetFormat (node:internal/modules/esm/get_format:142:36)
    at defaultLoad (node:internal/modules/esm/load:91:20)
    at DefaultModuleLoader.load (node:internal/modules/esm/loader:263:26)
    at DefaultModuleLoader.moduleProvider (node:internal/modules/esm/loader:179:22)
    at new ModuleJob (node:internal/modules/esm/module_job:63:26)
    at #createModuleJob (node:internal/modules/esm/loader:203:17)
    at DefaultModuleLoader.getJobFromResolveResult (node:internal/modules/esm/loader:156:34)
    at DefaultModuleLoader.getModuleJob (node:internal/modules/esm/loader:141:17)
    at DefaultModuleLoader.import (node:internal/modules/esm/loader:227:28)
    at node:internal/modules/run_main:56:28
    at loadESM (node:internal/process/esm_loader:40:13)
    at async handleMainPromise (node:internal/modules/run_main:66:12) {
  code: 'ERR_UNKNOWN_FILE_EXTENSION'
}

Node.js v20.5.1
/path/to/etherpad-lite/src:
 ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  ep_etherpad-lite@2.0.1 dev: `node --import tsx node/server.ts`
Exit status 1
 ELIFECYCLE  Command failed with exit code 1.

Server (please complete the following information):

meaz commented 2 months ago

Nevermind, it works fine nodejs 21

SamTV12345 commented 2 months ago

Sorry for the late response. Yes this is the issue. Node >=20 works with Typescript.

brunob commented 2 months ago

Sorry for the late response. Yes this is the issue. Node >=20 works with Typescript.

So it means that https://github.com/ether/etherpad-lite?tab=readme-ov-file#requirements should be updated ?

brunob commented 2 months ago

Sorry to bother you @SamTV12345 but @meaz says it works after switching from node 20 to 21, but you said that "Node >=20 works with Typescript.". Does it mean that node 21 is required ?

SamTV12345 commented 2 months ago

Sorry to bother you @SamTV12345 but @meaz says it works after switching from node 20 to 21, but you said that "Node >=20 works with Typescript.". Does it mean that node 21 is required ?

I heard different things. Some said it worked with NodeJS 18, some with 20. But NodeJS 21 seems to be always working.

brunob commented 2 months ago

Thx for the feedback, on ubuntu 20.04 with node v20.5.1 & npm 10.5.0 i get the same error reported in this issue. That's why i was wondering if requirements should be updated in readme.

webzwo0i commented 2 months ago

We need to clarify which node version is needed to run Etherpad.

README and package.json says v18 and based on https://endoflife.date/nodejs we could support v18 for at least this year.

v18 seems to work without modification, but for v20.5.1 the following works:

diff --git a/src/package.json b/src/package.json
index d69948a6..8e4d18c1 100644
--- a/src/package.json
+++ b/src/package.json
@@ -123,8 +123,8 @@
     "lint": "eslint .",
     "test": "mocha --import=tsx --timeout 120000 --recursive tests/backend/specs/**.ts ../node_modules/ep_*/static/tests/backend/specs/**",
     "test-container": "mocha --import=tsx --timeout 5000 tests/container/specs/api",
-    "dev": "node --import tsx node/server.ts",
-    "prod": "node --import tsx node/server.ts",
+    "dev": "node --require tsx/cjs node/server.ts",
+    "prod": "node --require tsx/cjs node/server.ts",
     "ts-check": "tsc --noEmit",
     "ts-check:watch": "tsc --noEmit --watch",
     "test-ui": "npx playwright test tests/frontend-new/specs",

makes it run on v20.5.1

webzwo0i commented 2 months ago

@SamTV12345 Will this change in the near future? If not, I'd add different invocations in bin/run.sh. I think most users either call those scripts or if they have unit files etc. they are able to adapt the commands themselves.

SamTV12345 commented 2 months ago

@SamTV12345

Will this change in the near future? If not, I'd add different invocations in bin/run.sh. I think most users either call those scripts or if they have unit files etc. they are able to adapt the commands themselves.

I'd say it won't change in the near future. So feel free to adapt the commands for <Node21