-
Notifications
You must be signed in to change notification settings - Fork 914
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cannot find module "@commitlint/config-conventional" when running commintlint globally #613
Comments
I think commitlint is usually being used on a per project basis. So each project has it's own config. echo 'should fail' | commitlint --config ~/.commitlintrc.js |
I tried your solution and is not working, the same exception as before. From what I understand from issue #123 it should be possible to use commitlint from any directory starting from version 5.0.1. |
we're also running into this issue. our goal is 0 configuration enforcement of conventional commits in CI --I expected the following to work:
|
@dexpota I just tried this on a clean Ubuntu VM: npm install -g @commitlint/config-conventional @commitlint/cli
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > ~/.commitlintrc.js
echo "hello world" | commitlint Output is: ⧗ input: hello world
✖ subject may not be empty [subject-empty]
✖ type may not be empty [type-empty]
✖ found 2 problems, 0 warnings
(Need help? -> https://github.com/conventional-changelog/commitlint#what-is-commitlint ) cat ~/.commitlintrc.js
module.exports = {extends: ['@commitlint/config-conventional']} I'm sorry, but I can't reproduce your issue. This issue is related to #126 (comment) |
Which version of Ubuntu are you using? I tried with Ubuntu 18.04 on a VM created with vagrant and I am having the same problem.
Here more information about the tool versions:
and these are the steps to recreate the VM using vagrant:
|
Alright, it's the node version! I used Ubuntu 18.04 with latest npm/node. Sorry for saying clean. I should have mentioned that. Is it possible for you to update the node version? |
I tried with node version |
to provide some color --it looks like our issue is slightly different from the one reported here. I can deterministically reproduce the module resolution failure on both node 8.x and 10.x when using works with
|
I did some digging too because I really really want to implement zero-config and the GitHub Action 😅 There is actually a chain of dependencies, working together making global imports work, here it goes:
There we go, that's our issue too. I tried adding a 3rd fallback in I'm not sure if we should drop or swap out For now, I can confidently add the "bug" label to this until that issue is resolved. |
Little status update: a PR to fix the underlying issue as described above is merged. Now we have to wait for a release and then we can test if it's still broken or not. 😄 To quote Sindre (maker of the package):
|
New |
I've tested this one, and unfortunately |
Quick status update, Yarn still has some issues with |
@byCedric Any new updates on this? Still tuned here. |
Unfortunately, it's still blocked by sindresorhus/global-directory#13. 😞 Apparently, its kind of a hard issue to solve. If it's not solvable in that library, we might have to rethink if we can solve this issue without this library. But that's a decision where also @marionebl and @escapedcat must be involved. |
Yup, it would be great to use it like @knksmith57 mentioned in the second example. module.exports = {extends: ['@commitlint/config-conventional']} and running: npx -p @commitlint/config-conventional -p @commitlint/cli -c 'echo "test" |commitlint' So the project can either have it own rules/config (if it's included in |
hey brother, When can this problem be solved. |
@Linyutau there's no timeline. This is more or less blocked by sindresorhus/global-directory#13 |
A bit unrelated, but in case it helps somebody: This error also occurs without having commitlint installed globally: if you have your commitlint.config.js a level above where your package.json is, the config is still found, but the OPs error occurs. For me, it was a simple mistake and when I copied the config to the same level as the package.json, it worked fine again. |
i run into the same bug under macOS. Is there any workaround to get it work as global installation? |
@paesrafael guessing you don’t work with any others as that’s only gonna work for your computer. |
I was experiencing the same issue see #847. However, I recently upgraded to node 10, and will try to retest this in the next couple of days since it seems that fixed the issue for some people in this thread. |
One year later, I am experiencing same issue with node v14.17.3 and npm 6.14.13 and globally installed commitlint. His reply actually helped me to focus on actual work |
Can confirm that it does not work. fwiw semantic-release’s plugins work as expected with npx \
--yes \
--package semantic-release@18.0.0 \
--package @semantic-release/exec@6.0.2 \
-- \
semantic-release |
For some reason, I had created the config file outside my working directory, one level back, then commitlint when trying to find the module, it didn't find it because node_modules was one level inside, I changed the config inside and it worked fine. |
With @commitlint/cli and @commitlint/config-conventional installed globally, on Linux, I got it working like this:
|
commitlint has some issue working with globally installed npm packages. See conventional-changelog/commitlint#613 for more details. The workaround is to not set the commitlint config in its config file but instead pass the full path to the module in the command line of commitlint.
commitlint has some issue working with globally installed npm packages. See conventional-changelog/commitlint#613 for more details. The workaround is to not set the commitlint config in its config file but instead pass the full path to the module in the command line of commitlint.
I am also having the same problem. I would like to use commitlint on a non-node.js project (with no package.json). Reproduce cat <<EOF > .commitlintrc.yaml
extends:
- '@commitlint/config-conventional'
EOF
echo "test" | npm exec --yes\
--package @commitlint/config-conventional\
--package @commitlint/cli\
commitlint Error: Error: Cannot find module "@commitlint/config-conventional" from "/Users/romain/Code/politician/template-repo"
at resolveId (/Users/romain/.npm/_npx/bda3302a37d8221c/node_modules/@commitlint/resolve-extends/src/index.ts:131:14)
at resolveConfig (/Users/romain/.npm/_npx/bda3302a37d8221c/node_modules/@commitlint/resolve-extends/src/index.ts:105:20)
at /Users/romain/.npm/_npx/bda3302a37d8221c/node_modules/@commitlint/resolve-extends/src/index.ts:51:20
at Array.reduce (<anonymous>)
at loadExtends (/Users/romain/.npm/_npx/bda3302a37d8221c/node_modules/@commitlint/resolve-extends/src/index.ts:49:13)
at resolveExtends (/Users/romain/.npm/_npx/bda3302a37d8221c/node_modules/@commitlint/resolve-extends/src/index.ts:25:19)
at load (/Users/romain/.npm/_npx/bda3302a37d8221c/node_modules/@commitlint/load/src/load.ts:56:33)
at async main (/Users/romain/.npm/_npx/bda3302a37d8221c/node_modules/@commitlint/cli/src/cli.ts:202:17) {
code: 'MODULE_NOT_FOUND'
} @mamachanko mentioned semantic-release's plugin system works well. I would like to add that textlint's plugin system also works: npm exec --yes\
--package textlint-filter-rule-allowlist\
--package textlint-filter-rule-comments\
--package textlint-rule-terminology\
textlint . |
Workaround for those in the same case as me, manually include the rules from your chosen config in your Here are the rules for .commitlintrc.yaml ---
# The rules below have been manually copied from @commitlint/config-conventional
# and match the v1.0.0 specification:
# https://www.conventionalcommits.org/en/v1.0.0/#specification
#
# You can remove them and uncomment the config below when the following issue is
# fixed: https://github.com/conventional-changelog/commitlint/issues/613
#
# extends:
# - '@commitlint/config-conventional'
rules:
body-leading-blank: [1, always]
body-max-line-length: [2, always, 100]
footer-leading-blank: [1, always]
footer-max-line-length: [2, always, 100]
header-max-length: [2, always, 100]
subject-case:
- 2
- never
- [sentence-case, start-case, pascal-case, upper-case]
subject-empty: [2, never]
subject-full-stop: [2, never, "."]
type-case: [2, always, lower-case]
type-empty: [2, never]
type-enum:
- 2
- always
- [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test] |
- For the husky v.8 not use the `.huskyrc` file for set the configuration. Set the configuration inside the `.husky` folder, in the individual files as the `commit-msg` hook. https://typicode.github.io/husky/#/?id=migrate-from-v4-to-v8 Steps: - Add the next command to the `commit-msg` hook: `npx --no -- commitlint --edit $1` Error: - Error: Cannot find module "@commitlint/config-conventional" from "/Applications/MAMP/htdocs/vue-todolist" at resolveId (/Users/beatrizsmerino/.npm/_npx/16d437951fea4b5e/node_modules/@commitlint/resolve-extends/src/index.ts:131:14) - ✖ body's lines must not be longer than 100 characters [body-max-line-length] ✖ found 1 problems, 0 warnings ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint Solution: - Install locally the packages: `npm install @commitlint/cli @commitlint/config-conventional --save-dev` `npm install commitizen cz-conventional-changelog --save-dev` - Update the configuration `commitlint`, increase the `body-max-line-length` References: - https://www.youtube.com/watch?v=jNxDNoYEGVU - https://www.youtube.com/watch?v=OJqUWvmf4gg - https://gist.github.com/qoomon/5dfcdf8eec66a051ecd85625518cfd13 - https://github.com/qoomon/git-conventional-commits - https://remarkablemark.org/blog/2019/05/29/git-husky-commitlint/ - https://typicode.github.io/husky/#/?id=husky_git_params-ie-commitlint- - https://stackoverflow.com/a/67074398 - https://rahulgurung.com/How-to-use-the-latest-Husky-8-with-Commitizen-for-adding-git-hooks-to-your-projects/ - https://www.techiediaries.com/git-hooks-husky-commitlint/ - https://www.freecodecamp.org/news/how-to-use-commitlint-to-write-good-commit-messages/ - https://medium.com/dottech/mejorando-los-mensajes-de-git-commit-con-husky-y-commitlint-7bddf6ab22c2 - commitizen/cz-cli#289 - https://github.com/conventional-changelog/commitlint - conventional-changelog/commitlint#613 - https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/index.js - https://github.com/conventional-changelog/commitlint/blob/master/docs/reference-rules.md#body-max-line-length
Just set
|
I have it working on one out of 2 terminals and this gave me a hint of what happened. Using
which install all my package in a slightly different directory that is never going to be sourced. Because on my environment the correct directory to install into should be 1 level up and not in the |
This might be a bit late, but here is my setup:
sudo npm i -g @commitlint/cli @commitlint/config-conventional
alias commitlint='commitlint --extends "@commitlint/config-conventional"'
Now you can use commitlint with > echo 'hello world' | commitlint
⧗ input: hello world
✖ subject may not be empty [subject-empty]
✖ type may not be empty [type-empty]
✖ found 2 problems, 0 warnings
ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
> echo 'feat: use commitlint globally' | commitlint -c false
# no output, means it works
> commitlint --print-config
{
extends: [ '@commitlint/config-conventional' ],
formatter: '@commitlint/format',
.....
}
|
Just to add to @politician's great comment, the command then becomes something like: I have to say that I'm somewhat shocked that this was so difficult to find. Does nobody outside of the JS ecosystem use commitlint? |
I was also facing this issue when using |
Note that in order to use local .commitlinrc.yml files which extend the `@commitlint/config-conventional` settings, we need to explicitly set NODE_PATH. Without doing this, `commitlint` will give an error saying it cannot find the module. See conventional-changelog/commitlint#613 for more discussion.
I'm trying to do this as well, but from inside the husky From inside a devcontainer, globally installing the packages and init-ing husky: npm install --yes -g @commitlint/cli @commitlint/config-conventional
npm install --yes -g husky && npx husky install The husky #!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
commitlint --extends "@commitlint/config-conventional" --edit ${1} ... and yet it doesn't find the module: > > git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file -
Error: Cannot find module "@commitlint/config-conventional" from "/workspaces/item-api"
at resolveId (/usr/local/share/nvm/versions/node/v18.18.0/lib/node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends/src/index.ts:131:14)
at resolveConfig (/usr/local/share/nvm/versions/node/v18.18.0/lib/node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends/src/index.ts:105:20)
at /usr/local/share/nvm/versions/node/v18.18.0/lib/node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends/src/index.ts:51:20
at Array.reduce (<anonymous>)
at loadExtends (/usr/local/share/nvm/versions/node/v18.18.0/lib/node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends/src/index.ts:49:13)
at resolveExtends (/usr/local/share/nvm/versions/node/v18.18.0/lib/node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends/src/index.ts:25:19)
at load (/usr/local/share/nvm/versions/node/v18.18.0/lib/node_modules/@commitlint/cli/node_modules/@commitlint/load/src/load.ts:56:33)
at async main (/usr/local/share/nvm/versions/node/v18.18.0/lib/node_modules/@commitlint/cli/src/cli.ts:214:17) {
code: 'MODULE_NOT_FOUND'
}
husky - commit-msg hook exited with code 1 (error) It's not clear why; calling the command in a normal terminal succeeds (eg, I can get it to succeed by writing a config file, but I have to comment out/remove
; node bin location = /usr/local/share/nvm/versions/node/v18.18.0/bin/node
; node version = v18.18.0
; npm local prefix = /workspaces/item-api
; npm version = 9.8.1
; cwd = /workspaces/item-api
; HOME = /home/vscode
; Run `npm config ls -l` to show all defaults. from both the husky hook and the terminal window. |
anyone using osx facing a similar issue with error |
I had the same issue. Solved it by running alias commitlint="docker run --user node -v ./:/home/node:ro -i commitlint/commitlint --extends '@commitlint/config-conventional' --cwd /home/node" |
Here's how I managed to arrive at a zero config solution (workaround):
Requires an intermediary temp file, which I didn't manage to get rid of.. |
A little update from my previous comment in this thread, I decided to migrate from NPM to PNPM recently, and things fell apart. Currently I have both commitlint --extends "@commitlint/config-conventional" --print-config
/home/user/.local/share/pnpm/global/5/.pnpm/@commitlint+cli@18.6.1_@types+node@20.11.17_typescript@5.3.3/node_modules/@commitlint/cli/lib/cli.js:123
throw err;
^
Error: Cannot find module "@commitlint/config-conventional" from "/home/user/projects/example"
at resolveId (/home/user/.local/share/pnpm/global/5/.pnpm/@commitlint+resolve-extends@18.6.1/node_modules/@commitlint/resolve-extends/lib/index.js:104:17)
at resolveConfig (/home/user/.local/share/pnpm/global/5/.pnpm/@commitlint+resolve-extends@18.6.1/node_modules/@commitlint/resolve-extends/lib/index.js:88:26)
at /home/user/.local/share/pnpm/global/5/.pnpm/@commitlint+resolve-extends@18.6.1/node_modules/@commitlint/resolve-extends/lib/index.js:47:26
at Array.reduce (<anonymous>)
at loadExtends (/home/user/.local/share/pnpm/global/5/.pnpm/@commitlint+resolve-extends@18.6.1/node_modules/@commitlint/resolve-extends/lib/index.js:45:16)
at resolveExtends (/home/user/.local/share/pnpm/global/5/.pnpm/@commitlint+resolve-extends@18.6.1/node_modules/@commitlint/resolve-extends/lib/index.js:25:22)
at load (/home/user/.local/share/pnpm/global/5/.pnpm/@commitlint+load@18.6.1_@types+node@20.11.17_typescript@5.3.3/node_modules/@commitlint/load/lib/load.js:42:52)
at async main (/home/user/.local/share/pnpm/global/5/.pnpm/@commitlint+cli@18.6.1_@types+node@20.11.17_typescript@5.3.3/node_modules/@commitlint/cli/lib/cli.js:162:24) {
code: 'MODULE_NOT_FOUND'
}
Node.js v20.11.0 This is a speculation on my part, since I haven't studied the source code, but I think Either way, I ended up with yet another workaround. In alias commitlint='commitlint --extends "$(pnpm root -g)/@commitlint/config-conventional/lib/index.js"' As a closing thought I would say this - I am grateful to all devs and maintainers for providing us these wonderful tools for free, but I wish global configuration was made easier, since I believe a lot of folks out there use the cli globally. |
No sure if pnpm ever worked with this or not but I know that there is at least one PR related to pnpm. Would be great to have someone who could take care of checking and testing pnpm support. |
Can you try latest v19? |
Not sure if the updates were targeting this scenario, but I still can't get this to work: npx --yes --package="@commitlint/cli" --package="@well-crafted/commitlint-config" \
commitlint --extends "@well-crafted/commitlint-config" --edit |
@carhartl I don't think we support such usage. |
Expected Behavior
I installed
commitlint
andcommitlint/config-conventional
globally, thus runningecho 'hello world' | commitlint
under any directory should works.Current Behavior
The command raises an exception.
Affected packages
Steps to Reproduce (for bugs)
npm install -g @commitlint/cli @commitlint/config-conventional
echo "module.exports = {extends: ['@commitlint/config-conventional']};" > ~/.commitlintrc.js
echo 'should fail' | commitlint
commitlint.config.js
```js module.exports = {extends: ['@commitlint/config-conventional']}; ```Your Environment
commitlint --version
git --version
node --version
The text was updated successfully, but these errors were encountered: