commitlint: Can't run commitlint on project with tsconfig.json

When running commitlint on a typeScript project, I have an error because commitlint use the project tsconfig.json.

Expected Behavior

commitlint should not use the project typeScript configuration.

Current Behavior

commitlint produce the following traceback:

/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:843
    return new TSError(diagnosticText, diagnosticCodes, diagnostics);
           ^
TSError: ⨯ Unable to compile TypeScript:
error TS6053: File '@loopback/build/config/tsconfig.common.json' not found.

    at createTSError (/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:843:12)
    at reportTSError (/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:847:19)
    at createFromPreloadedConfig (/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:858:36)
    at create (/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:613:10)
    at register (/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:580:15)
    at TypeScriptLoader (/usr/local/lib/node_modules/commitlint/node_modules/cosmiconfig-typescript-loader/dist/loader.js:7:51)
    at loadConfig (/usr/local/lib/node_modules/commitlint/node_modules/@commitlint/load/src/utils/load-config.ts:35:27)
    at load (/usr/local/lib/node_modules/commitlint/node_modules/@commitlint/load/src/load.ts:25:33)
    at main (/usr/local/lib/node_modules/commitlint/node_modules/@commitlint/cli/src/cli.ts:199:27)
    at processTicksAndRejections (node:internal/process/task_queues:95:5) {
  diagnosticCodes: [ 6053 ]
}

Affected packages

  • cli
  • core
  • prompt
  • config-angular

Possible Solution

Steps to Reproduce (for bugs)

  1. clone the repository https://gitlab.mim-libre.fr/alphabet/laboite-blog-api.git
  2. execute commitlint --from HEAD~2 --to HEAD
commitlint.config.js
module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'body-max-line-length': [2, 'always', 120],
    'footer-max-line-length': [2, 'always', 120],
    'header-max-length': [2, 'always', 72],
  },
};

Context

We upgraded our commitlint container for our CI and now all typeScript project are failling.

Your Environment

Executable Version
commitlint --version 16.3.0
git --version 2.36.1
node --version 18.4.0

About this issue

  • Original URL
  • State: open
  • Created 2 years ago
  • Reactions: 25
  • Comments: 19 (5 by maintainers)

Commits related to this issue

Most upvoted comments

Just check the encoding of index.ts. In my case, somehow it was UTF-16. Once I changed it to UTF-8 (in Notepad++) - the problem is gone.

I’m getting the same UTF-16 file after following docs https://commitlint.js.org/#/guides-local-setup?id=install-commitlint with command

# Configure commitlint to use conventional config
echo "module.exports = { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js 

Error log:

D:\dev\Project\node_modules\.pnpm\ts-node@10.9.1_@types+node@18.16.19_typescript@5.1.6\node_modules\ts-node\src\index.ts:859
    return new TSError(diagnosticText, diagnosticCodes, diagnostics);
           ^
TSError: ⨯ Unable to compile TypeScript:
commitlint.config.js(1,1): error TS1490: File appears to be binary.

The problem is solved after changing the file encoding to UTF-8 manually.

Just check the encoding of index.ts. In my case, somehow it was UTF-16. Once I changed it to UTF-8 (in Notepad++) - the problem is gone.

Reopening because of #3641 This will then hopefully be fixed with a new mayor version. yolo

Just check the encoding of index.ts. In my case, somehow it was UTF-16. Once I changed it to UTF-8 (in Notepad++) - the problem is gone.

@TimeCoder Can you be a little more specific? Which index.ts file has this problem? I badly need to resolve this conflict

My error message still is:

/home/dwesley/www/node-config-template/node_modules/@commitlint/cli/lib/cli.js:123
        throw err;
        ^

TypeError: value.replace is not a function
    at normalizeSlashes (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/util.js:62:18)
    at Object.getExtendsConfigPath (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/ts-internals.js:24:54)
    at readConfig (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/configuration.js:127:64)
    at findAndReadConfig (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/configuration.js:50:84)
    at create (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/index.js:146:69)
    at register (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/index.js:127:19)
    at TypeScriptLoader (/home/dwesley/www/node-config-template/node_modules/cosmiconfig-typescript-loader/dist/cjs/index.js:52:54)
    at loadConfig (/home/dwesley/www/node-config-template/node_modules/@commitlint/load/lib/utils/load-config.js:12:75)
    at load (/home/dwesley/www/node-config-template/node_modules/@commitlint/load/lib/load.js:19:55)
    at main (/home/dwesley/www/node-config-template/node_modules/@commitlint/cli/lib/cli.js:194:45)

Node.js v18.17.0
husky - commit-msg hook exited with code 1 (error)

Just check the encoding of index.ts. In my case, somehow it was UTF-16. Once I changed it to UTF-8 (in Notepad++) - the problem is gone.

@TimeCoder Can you be a little more specific? Which index.ts file has this problem? I badly need to resolve this conflict

My error message still is:

/home/dwesley/www/node-config-template/node_modules/@commitlint/cli/lib/cli.js:123
        throw err;
        ^

TypeError: value.replace is not a function
    at normalizeSlashes (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/util.js:62:18)
    at Object.getExtendsConfigPath (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/ts-internals.js:24:54)
    at readConfig (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/configuration.js:127:64)
    at findAndReadConfig (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/configuration.js:50:84)
    at create (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/index.js:146:69)
    at register (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/index.js:127:19)
    at TypeScriptLoader (/home/dwesley/www/node-config-template/node_modules/cosmiconfig-typescript-loader/dist/cjs/index.js:52:54)
    at loadConfig (/home/dwesley/www/node-config-template/node_modules/@commitlint/load/lib/utils/load-config.js:12:75)
    at load (/home/dwesley/www/node-config-template/node_modules/@commitlint/load/lib/load.js:19:55)
    at main (/home/dwesley/www/node-config-template/node_modules/@commitlint/cli/lib/cli.js:194:45)

Node.js v18.17.0
husky - commit-msg hook exited with code 1 (error)

When I use the latest array values in my tsconfig/extends, I encounter this error. However, when I change it to a string, the error disappears. Therefore, I believe it’s an issue with ts-node not supporting parsing of the latest ts configuration. Perhaps upgrading ts-node version could resolve this problem?

🤔 It seems that we suffer from the same problem for the okp4/team-wiki project. The temporary solution was to delete the tsconfig.json file while linting the github action.

It looks like yes, I’m not sure it’s a good idea for commitlint to load the project configuration but I don’t know how to prevent that.

I managed to work around this issue by cd /tmp and execute commitlint --cwd /my/sources

Pity, looks like it’s somehow picking this up?: https://gitlab.mim-libre.fr/alphabet/laboite-blog-api/-/blob/dev/tsconfig.json#L3 Never had an issue with other projects using tsconfig.

It looks like yes, I’m not sure it’s a good idea for commitlint to load the project configuration but I don’t know how to prevent that.