Всем привет! Есть такая проблема: Webpack (или ts-loader) ломает область

видимости функций.

Грубо говорят, пишу:

export const func1 = (): void => { console.log("kek") }; - и в скомпилированном файле я не могу вызвать func1().

Если компилю через tsc, то норм всё вызывается.

Как решить проблему?

webpack.config.ts
import * as path from "path";
import * as webpack from "webpack";

const config: webpack.Configuration = {
entry: "./src/main.ts",
devtool: "inline-source-map",
module: {
rules: [
{
test: /\.tsx?$/,
use: "ts-loader",
exclude: /node_modules/,
},
],
},
resolve: {
extensions: [".tsx", ".ts", ".js"],
},
output: {
filename: "incomesandexpensesrate.js",
path: path.resolve(__dirname, "dist"),
},
};

export default config;

tsconfig.json
{
"compilerOptions": {
"target": "ES5",
"esModuleInterop": true,
"module": "commonJs",
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true,
"removeComments": true,
"sourceMap": true,
"outDir": "./dist",
"types": ["node"]
}
}

11 ответов

21 просмотр
Kenya-West-️ Автор вопроса

А теперь он выдает так. WTF вообще

Он удаляет не используемые функции, это не тот случай?

Kenya-West-️ Автор вопроса

Да, недавний гуглеж показал, что из-за тришейкинга он удалил ненужные export (т. к. import он не нашел). Поведение правильное, но мне нужно обязательно скомпилировать этот код. Для этого я добавил секцию: optimization: { usedExports: false } Но в итоге функция handler() всё равно нормально не экспортируется. Она должна запускаться по команде до и после компиляции: node -e "const kek = require('./incomesandexpensesrate.js'); kek.handler()" Вебпак же ломает такое поведение, и выходит ошибка: TypeError: kek.handler is not a function

У меня такое ощущение что вы собираете какой-то тайпскриптовый скрипт без картинок шрифтов стилей и вот это всего, я угадал?

Kenya-West-️ Автор вопроса

Я собираю функцию для serverless решения. Вот код, который работает: module.exports = { handler: (event, context) => { return 5 } }; Webpack должен скомпилировать код из кучи TS-файлов в эту функцию

а можете дать ts файл из которого это должно получится?

Kenya-West-️ Автор вопроса

Ну, например: const.model.ts: export enum EConst { COUNT = 5 } main.ts: module.exports = { handler: (event: never, context: any): EConst => { return EConst.COUNT } }; Это от балды написано, но должно работать. В итоге должен скомпилиться кусок кода, который приведет мной в сообщении выше

первая проблема в том что это не тайпскрипт, в нем нету module.exports

Kenya-West-️ Автор вопроса

Нода выдаст ошибку типа такой

ну так ты ж для ноды собираешь этот код https://t.me/webpack_ru/84943

Kenya-West-️ Автор вопроса

Да. Для Ноды 10. А она только CommonJS или AMD ест, а ES модули не

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта