1

I've created a starter project for open source projects that includes features like commitlint, release-it, etc.

https://github.com/fireflysemantics/fs-github-flow-docs-starter

If we clone it down like this:

git clone https://github.com/fireflysemantics/fs-github-flow-docs-starter

And add "type": "module" to package.json and try to do a commit like this:

git add package.json 
git commit -m "fail"

Instead of the normal commitlint message that looks something like this:

⧗   input: fail
✖   subject may not be empty [subject-empty]
✖   type may not be empty [type-empty]

✖   found 2 problems, 0 warnings

We get:

ReferenceError: module is not defined in ES module scope
This file is being treated as an ES module because it has a '.js' file extension and '/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
    at file:///Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/commitlint.config.js:1:1
    at ModuleJob.run (node:internal/modules/esm/module_job:222:25)
    at async ModuleLoader.import (node:internal/modules/esm/loader:316:24)
    at async loadJs (/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/cosmiconfig/dist/loaders.js:23:17)
    at async #loadConfiguration (/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/cosmiconfig/dist/Explorer.js:116:36)
    at async #loadConfigFileWithImports (/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/cosmiconfig/dist/Explorer.js:87:31)
    at async #readConfiguration (/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/cosmiconfig/dist/Explorer.js:84:51)
    at async search (/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/cosmiconfig/dist/Explorer.js:50:40)
    at async Explorer.search (/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/cosmiconfig/dist/Explorer.js:78:20)
    at async loadConfig (file:///Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/@commitlint/load/lib/utils/load-config.js:53:19) {
  filepath: '/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/commitlint.config.js'
}

And the reason for this is that node wants the format to be in ES module format if we add the "type": "module" property to package.json, however if this is not present the configuration that is shipped with the project works.

If we add "type": "module" then this configuration will work.

const Configuration = { extends: ['@commitlint/config-conventional'] };
export default Configuration;

However if this configuration is used without "type": "module" being set then this error is thrown:

SyntaxError: Unexpected token 'export'
    at wrapSafe (node:internal/modules/cjs/loader:1281:20)
    at Module._compile (node:internal/modules/cjs/loader:1321:27)
    at Module._extensions..js (node:internal/modules/cjs/loader:1416:10)
    at Module.load (node:internal/modules/cjs/loader:1208:32)
    at Module._load (node:internal/modules/cjs/loader:1024:12)
    at Module.require (node:internal/modules/cjs/loader:1233:19)
    at module.exports (/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/import-fresh/index.js:32:59)
    at loadJsSync (/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/cosmiconfig/dist/loaders.js:17:12)
    at loadJs (/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/cosmiconfig/dist/loaders.js:27:43)
    at async #loadConfiguration (/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/node_modules/cosmiconfig/dist/Explorer.js:116:36) {
  filepath: '/Users/oleersoy/Github/RM1/fs-github-flow-docs-starter/commitlint.config.js'
}

Ideally there would be a configuration that can be loaded that is "Indifferent" to whether "type": "module" is specified or not, that way developers who extend The Github Flow Starter Project can do so without getting errors / having to change the commitlint configuration.

Thoughts?

2

1 Answer 1

1

OK we can have the file as an .mjs file, and use the ES Module format configuration and then it will work regardless of whether "type": "module" is set in package.json.

I've updated the starter project configuration in case anyone wants something to play with.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.