Пытаюсь достучаться до импорта модулей.
Желание: использовать require и import независимо от типа модулей(module_es6/commonjs) без дополнительных библиотек.
В каталогах(картинка) demo-* - экспорт
В каталогах import-as-* - импорт того что в demo-*
Модули *-commonjs описаны в стиле module.exports/require
Модули *-module описаны в стиле export/import
Пример:
// "type": "commonjs"
module.exports = () => {
return "i commonjs"
}
// "type": "module"
export default () => {
return "i module"
}
В каждом package.json добавлено соответствующее свойство "type": "module/commonjs"
Пример:
{
"name": "demo-module",
"main": "./index.js",
"type": "module"
}
Node(-v v12.13.0) запускается с флагом --experimental-modules и --es-module-specifier-resolution=node
С импортом из import-as-module все нормально, импортируется в том числе и модуль demo-commonjs.
А вот из import-as-commonjs не импортирует из require('../demo-module') ничего.
Error [ERR_REQUIRE_ESM]:
Must use import to load ES Module: ...path.../demo-module/index.js
Как добиться желаемого результата?
Ниже невыполнимый сниппет!!!
// + ПРИМЕРЫ ЭКСПОРТА
// demo-commonjs | package.json->{name, main,"type": "commonjs"}
module.exports = () => {
return "i commonjs"
}
// demo-module | package.json->"type": "module"
const CONST_MOD = 'CONST_MOD'
export { CONST_MOD }
export default () => {
return "i module"
}
// + ПРИМЕРЫ ИМПОРТА
// import-as-module | package.json->"type": "module"
import CommonJS from '../demo-commonjs'
console.log(CommonJS())
import def, { CONST_MOD } from '../demo-module'
console.log(def())
console.log(CONST_MOD)
// import-as-commonjs | package.json->"type": "commonjs"
const CommonJS = require('../demo-commonjs')
console.log(CommonJS())
// ЗДЕСЬ ПОЛУЧАЮ ОШИБКУ
try {
var CONST_MOD = require('../demo-module')
}
catch (error) {
console.error(error) // Must use import to load ES Module:
}
console.log(CONST_MOD) // undefined
https://nodejs.org/dist/latest-v12.x/docs/api/esm.html#esm_code_require_code
require always treats the files it references as CommonJS.
Так что ваше желание невыполнимо.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости