Does a resolver have to be cjs?
nnmrts opened this issue · comments
Nano Miratus commented
I wrote this dummy resolver:
// deno-resolver.js
const interfaceVersion = 2;
/**
*
* @param source
* @param file
* @param config
* @example
*/
const resolve = (source, file, config) => {
console.log("TEST");
};
export {
interfaceVersion,
resolve
};
And added this to my eslint config settings
:
{
"import/resolver": "deno-resolver.js",
}
Now, when I run npx eslint .
in the same folder, instead of logging "TEST" and then failing, it immediately errors with this:
/Users/nnmrts/projects/eslint-config/config.js
1:1 warning Resolve error: Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/nnmrts/projects/eslint-config/deno-resolver.js from /Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js not supported.
Instead change the require of deno-resolver.js in /Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js to a dynamic import() which is available in all CommonJS modules.
at tryRequire (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:57:10)
at requireResolver (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:196:8)
at fullResolve (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:141:22)
at relative (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:158:10)
at resolve (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:232:12) import/no-deprecated
1:1 error Resolve error: Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/nnmrts/projects/eslint-config/deno-resolver.js from /Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js not supported.
Instead change the require of deno-resolver.js in /Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js to a dynamic import() which is available in all CommonJS modules.
at tryRequire (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:57:10)
at requireResolver (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:196:8)
at fullResolve (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:141:22)
at relative (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:158:10)
at resolve (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:232:12) import/namespace
1:1 error Resolve error: Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/nnmrts/projects/eslint-config/deno-resolver.js from /Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js not supported.
Instead change the require of deno-resolver.js in /Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js to a dynamic import() which is available in all CommonJS modules.
at tryRequire (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:57:10)
at requireResolver (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:196:8)
at fullResolve (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:141:22)
at relative (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:158:10)
at resolve (/Users/nnmrts/projects/eslint-config/node_modules/eslint-module-utils/resolve.js:232:12) import/default
...
Is this expected? Does my resolver really need to be written in CJS now?
Below is my "full" config file, if you want to look even deeper, you can look at https://github.com/pumpncode/eslint-config.
import globals from "globals";
import plugins from "./plugins.js";
import rules from "./rules.js";
const cssFilesRefreshRate = 5_000;
const convertedGlobals = Object.fromEntries(
Object.entries({
...globals.browser,
...globals.builtin
})
.map(([global, isWritable]) => [
global,
isWritable
? "writable"
: "readonly"
])
);
const config = [
{
ignores: [
"_fresh/**",
"documentation/**",
"patches/**"
]
},
{
files: ["**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}"],
languageOptions: {
ecmaVersion: "latest",
globals: {
Deno: "readonly",
...convertedGlobals
},
parserOptions: {
ecmaFeatures: {
jsx: true
},
ecmaVersion: "latest",
jsxPragma: null,
requireConfigFile: false,
sourceType: "module"
},
sourceType: "module"
},
linterOptions: {
noInlineConfig: false,
reportUnusedDisableDirectives: "error"
},
plugins,
rules,
settings: {
formComponents: ["Form"],
"import/core-modules": [],
"import/extensions": [
".js",
".mjs",
".jsx"
],
"import/parsers": {
espree: [
".js",
".cjs",
".mjs",
".jsx"
]
},
"import/resolver": "deno-resolver.js",
jsdoc: {
mode: "typescript",
tagNamePreference: {
augments: "extends",
extends: "extends",
function: "method",
method: "method"
}
},
linkComponents: [
{
linkAttribute: "to",
name: "Link"
}
],
react: {
pragma: "h",
version: "18"
},
regexp: {
allowedCharacterRanges: ["alphanumeric"]
},
tailwindcss: {
callees: [
"classnames",
"clsx",
"ctl"
],
classRegex: "^class(Name)?$",
config: "tailwind.config.js",
cssFiles: [
"**/*.css",
"!**/node_modules",
"!**/.*",
"!**/dist",
"!**/build"
],
cssFilesRefreshRate,
removeDuplicates: true,
skipClassAttribute: false,
tags: [],
whitelist: []
}
}
},
{
files: ["**/*.{jsx,mjsx,tsx,mtsx}"],
rules: {
"jsdoc/require-param": ["warn", { unnamedRootBase: ["props"] }]
}
},
{
files: ["**/_exports.?(*.)js"],
rules: {
"import/max-dependencies": "off",
"import/prefer-default-export": "off"
}
},
{
files: [
"benchmarks/**/*",
"tests/**/*",
"scripts/**/*"
],
rules: {
"import/no-unused-modules": "off",
"import/unambiguous": "off"
}
}
];
export default config;
Jordan Harband commented
Yes, because ESM can’t be synchronously consumed by CJS.