Разница между типами модулей в tsconfig.json
Описание проблемы
В файле tsconfig.json
у меня следующие настройки:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
}
}
Я не могу понять разницу между следующими типами module
:
- "commonjs"
- "amd"
- "umd"
- "system"
- "es6"
- "es2015"
- "none"
Вопрос:
Какое значение я должен использовать и когда его применять?
1 ответ(ов)
На StackOverflow можно встретить такие описания различных паттернов модулей в JavaScript, как CommonJS, ES6 и AMD. Вот краткое сравнение этих паттернов:
CommonJS (или Node.js):
var someOtherFunction = require('./someOtherFunction.js');
exports.add = function() {
var sum = 0, i = 0, args = arguments, l = args.length;
while (i < l) {
sum += args[i++];
}
return sum;
}
Здесь используется require
для импорта зависимостей и exports
для экспорта функций.
ES6:
import someOtherFunction from './someOtherFunction.js';
export function add() {
var sum = 0, i = 0, args = arguments, l = args.length;
while (i < l) {
sum += args[i++];
}
return sum;
}
В ES6 (или ECMAScript 2015) используется синтаксис import
и export
, что делает код более читабельным и структурированным.
AMD:
define(['someOtherFunction'], function () {
return function () {
var sum = 0, i = 0, args = arguments, l = args.length;
while (i < l) {
sum += args[i++];
}
return sum;
};
});
AMD (Asynchronous Module Definition) наиболее популярен в клиентском коде и использует функцию define
для определения модулей.
Дополнительная информация:
- AMD лучше всего подходит для клиентских приложений, так как поддерживает асинхронную загрузку модулей.
- Node.js модули (расширение CommonJS) являются основным паттерном для серверной среды.
- Universal Module Definition (UMD) — это набор шаблонов, который помогает объединить различия между AMD и Node.js, позволяя разработчикам писать свой код в одном формате, вместо того чтобы создавать два разных формата или конвертировать их на этапе сборки.
- ES5 — это обычный JavaScript, который вы могли видеть до появления ES6.
- Вы будете использовать ES6 для разработки на Angular2 и других современных фреймворках.
Если у вас есть вопросы или нужна помощь с конкретными аспектами использования этих паттернов, не стесняйтесь спрашивать!
Как в Node.js "подключить" функции из других файлов?
Node / Express: EADDRINUSE, адрес уже занят - как остановить процесс, использующий порт?
Как указать необходимую версию Node.js в файле package.json?
Разница между "require(x)" и "import x"
@Directive против @Component в Angular