Форум программистов, компьютерный форум, киберфорум
TypeScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322

TypeScript вместо babel и webpack

29.11.2018, 20:45. Показов 4067. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал tsconfig.json

При помоще него можно транслировать esnext в es5, это хорошо работает, но не могу понять как собирать модули?

Если у меня "export function AjaxPOST(url, object, success, error)" и import { AjaxPOST, AjaxPOSTAsync, AjaxPOSTAsyncFileSend } from './Utils.js';

Как это ввсе собрать воедино? или нужно использовать системы для модулей? "module": "commonjs"

Как именно это сделать? есть какие примеры?

Можно конечно <script src="~/out/main.js" type="module"></script>, то тогда нет смысла использовать конвертацию в ES5

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
  "compileOnSave": true,
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "allowJs": true,
    //"checkJs": true,
    "removeComments": true,
    "allowSyntheticDefaultImports": true,
    "jsx": "react",
    "experimentalDecorators": true,
    "strict": true,
    "noEmit": false,
    "outDir": "out",
    "sourceMap": true,
    "lib": [
      "dom",
      "esnext",
      "esnext.array",
      "esnext.asynciterable",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [ "src" ],
  "exclude": [ "node_modules", "build", "public", "obj" ]
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.11.2018, 20:45
Ответы с готовыми решениями:

Flow+Babel или TypeScript?
Добрый день. Поделитесь, пожалуйста, опытом при разработке веб-приложений на React с использованием средств для статической типизации. ...

Раздельная компиляция WebPack + TypeScript ?
Добрый день. Есть ли у кого опыт в реализации раздельной компиляции модулей в Webpack/Typescript приложениях? Дело в том, что по...

Ошибка с babel
Как видите не получается поправить версию бабеля пробовал пару решений безрезультатно, у кого какие идеи??? ERROR in ./src/index.js ...

4
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
17.12.2018, 12:29
Если вы в чём-то хотите разобраться, то нужно начать с минимального, а не напихивать в tsconfig.json так много всего сразу.

Есть много способов, как скомпилировать в ES3 или ES5, чтобы использовать в браузере.

Я знаю хорошо два способа:
  • Gulp + Browserify. Здесь подробная инструкция: Gulp · TypeScript
  • Использование "module": "amd" и библиотеку Require.js

Остановлюсь подробно на втором варианте. Второй вариант очень хорошо подходит если вам нужно расположить ваши модули в песочнице, например, на Plunker, чтобы задать вопрос по TypeScript. То есть когда вам нужно сделать минимальный пример для демонстрации какого-то вопроса для размещения в песочнице и этот минимальный пример состоит их нескольких модулей. Для разработки веб приложений этот вариант тоже подходит.

Пример в песочнице, который выводит информацию на окно браузера:https://plnkr.co/edit/QmAov1yC... ?p=preview

Результат:
Hello from main
triangle1 color = green
triangle2 color = yellow
Локально на своей машине вы:
  • создаёте пустую папку для проекта
  • создаёте файл package.json с помощью команды:
    npm init -y
  • устанавливаете файл с типами для Require.js:
    npm i -D @types/requirejs

Минимальный tsconfig.json:

JSON
1
2
3
4
5
6
{
    "compilerOptions": {
        "target": "es5",
        "module": "amd"
    }
}
Напишем два модуля. Есть главный модуль Program, в который импортируется модуль Trinangle. В классе Triangle хранится свойство "color", которое мы выводим на экран в функции main класса Program.

Program.ts

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { Triangle } from "./Triangle";
 
// Playground: https://plnkr.co/edit/QmAov1yCDCFChmKKjuyj?p=preview
 
class Program
{
    public static main()
    {
        document.write("Hello from main<br>");
 
        let triangle1 = new Triangle();
        document.write(`triangle1 color = ${ triangle1.color }<br>`);
 
        let triangle2 = new Triangle("yellow");
        document.write(`triangle2 color = ${ triangle2.color }`);
        document.close();
    }
}
Program.main();
Triangle.ts

JavaScript
1
2
3
4
5
6
7
8
9
export class Triangle
{
    public color: string;
 
    public constructor(color = "green")
    {
        this.color = color;
    }
}
Файл RequireConfig.ts определяет корень проекта baseUrl и определяет главный модуль:

JavaScript
1
2
3
4
5
6
7
8
requirejs.config({
    baseUrl: "."
});
 
requirejs(["Program"], (Program) =>
{
 
});
Загружаем сначала файл require.min.js, потом RequireConfig.js, а далее загружается главный модуль и все оcтальные модули, которые требуются в import

index.html
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Minimal Example in TypeScript and Require.js</title>
    <script data-main="RequireConfig" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>
</head>
 
<body>
 
</body>
 
</html>
Добавлено через 23 минуты
Вводим команду в консоль для компиляции:
tsc
Теперь мы может открыть index.html в браузере и все модули будут загружены.
2
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
17.12.2018, 14:01  [ТС]
Я пишу на чистом ES6, и бакэнд на asp.net mvc5. сам тайп скрипт я не использую
А бабел+webpack использую для другой страницы с реактом
в проекте есть и реакт и нативный JS

и мне достаточно ES6 работы с модулем, import export

JavaScript
1
2
3
4
5
6
import {
    AjaxPOSTAsync,
    AjaxPOSTAsyncFileSend
} from "./Utils.js";
 
export function AjaxPOST(url, object, success, error) {
HTML5
1
2
3
    
<script type="module" src="./node_modules/jquery/dist/jquery.js"></script>
    <script type="module" src="./src/main.js"></script>
я бы хотел сделать поддержку ie11, для этотого добавил транслятор тайпскрипт

tsconfig.json

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
  "compileOnSave": true,
  "noImplicitAny": true,
  "compilerOptions": {
    "target": "es5",
    "module": "amd",
    "allowJs": true,
    //"checkJs": true,
    "removeComments": true,
    "allowSyntheticDefaultImports": true,
    "jsx": "react",
    "experimentalDecorators": true,
    "strict": true,
    "noEmit": false,
    "outDir": "out",
    "sourceMap": true,
    "lib": [
      "dom",
      "esnext",
      "esnext.array",
      "esnext.asynciterable",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [ "src" ],
  "exclude": [ "node_modules", "build", "public", "obj" ]
}

в результате я получаю 2 файла в формате es5
\out\app.js

JavaScript
1
2
3
4
define(["require", "exports", "./Utils.js"], function (require, exports, Utils_js_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    function createRow$(data, titleText) {
\out\Utils.js

JavaScript
1
2
3
4
5
define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    function AjaxPOST(url, object, success, error) {
        var xhr = new window.XMLHttpRequest();
и вот тут проблема , я не знаю как их использовать
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
17.12.2018, 15:20
Лучший ответ Сообщение было отмечено Amadara как решение

Решение

У вас в настройках стоит "module": "amd". Это значит, что вы используете "ассинхронную загрузку модулей". Выше я показал, как использовать AMD с помощью библиотеки Require.js. Я знаю только это способ загрузки AMD-модулей. Я читал, что есть ещё Dojo, но я не пробовал. Здесь туториалы: https://dojotoolkit.org/documentation/#tutorials

Цитата Сообщение от Amadara Посмотреть сообщение
в результате я получаю 2 файла в формате es5
В том примере, который я выше показывал я тоже получаю два файла в формате ES5 с:
JavaScript
1
define(["require", "exports"]
в начале файла. Я показал пример, как загружать AMD модули с помощью Require.js. Попробуйте Dojo, может вам больше понравится.
1
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
17.12.2018, 16:09  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
У вас в настройках стоит "module": "amd". Это значит, что вы используете "ассинхронную загрузку модулей". Выше я показал, как использовать AMD с помощью библиотеки Require.js. Я знаю только это способ загрузки AMD-модулей. Я читал, что есть ещё Dojo, но я не пробовал. Здесь туториалы: https://dojotoolkit.org/documentation/#tutorials


В том примере, который я выше показывал я тоже получаю два файла в формате ES5 с:
JavaScript
1
define(["require", "exports"]
в начале файла. Я показал пример, как загружать AMD модули с помощью Require.js. Попробуйте Dojo, может вам больше понравится.
спасибо

я оценил затраты (ничего в эти старых модулях не понимаю )
и просто избавился от модуля нет import нет проблем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2018, 16:09
Помогаю со студенческими работами здесь

Babel не хочет трансплитить
Здравствуйте, вот есть конфиг: var webpack = require('webpack'); module.exports = { entry: './home', output: { ...

Gulp/babel/polyfill
Товарищи! Промучился два дня, облазил, в т.ч. англоязычные, форумы, вкуривал документацию по babel, и понял, что сам разобраться не могу. ...

Nodejs и destructuring assignment, babel
&quot;use strict&quot;; let = ; console.log(p1); console.log(p2); Нода выдает ошибку: Unexpected token let

Babel в браузере через require
Добрый день, подскажите плииз. Хочу попрбовать запустить Babel прямо в браузере. Нашел исходники в js, который можно подгрузить...

Подключение React, babel в Webstorm
Уже 3 дня не удается правильно настроить react и Webstorm. Таже проблема з babel. Пожалуйста, напишите как грамотно ето сделать, или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru