Пытаюсь достучаться до импорта модулей.
Желание: использовать 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.
Так что ваше желание невыполнимо.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть задачаНаписать функцию, которая принимает время (часы, минуты, секунды) и выводит его на экран в формате «чч:мм:сс»
Как обратиться к вложенной функции и вложенной в нее функции?
Возможно ли в JavaScript округлять числа по следующей схеме:
Появляется много ошибок и при нажатии на кнопку добавляется +1 ошибка