Как создать исполняемый файл Bundle.js для Node.js?Javascript

Форум по Javascript
Ответить
Anonymous
 Как создать исполняемый файл Bundle.js для Node.js?

Сообщение Anonymous »

Я хочу объединить несколько файлов TypeScript и создать файл, который объединяет все, что будет использоваться через узел build/bundle.js, и который можно скопировать в CodinGame. Все работает (транспиляция, сборка, анализ с помощью Biome и модульные тесты с помощью Jest, включая выполнение), за исключением вызова пакета через Node.js (npm run test, удаленный после приведенного выше крайнего упрощения, который просто вызывает jest, работает отлично).
Мне не нужен автономный исполняемый файл (./bundle), потому что мне нужен вызываемый через Node.js (node build/bundle.js), и я думаю, что тот же вывод подойдет для CodinGame.
Сборка работает отлично, но вывод недействителен, по крайней мере, для моей цели (или моей версии Node.js, но JS должен был измениться). Моя операционная система — Debian GNU/Linux 13 «Trixie» (текущая стабильная версия), и я установил Node.js (v20.19.2) через APT (менеджер пакетов Debian, Ubuntu и многих других дистрибутивов).
В рабочем режиме Webpack узел build/bundle.js вызывает TypeError: r не является функцией (и TypeError: e не является функцией перед моим кодом крайнее упрощение). В режиме разработки Webpack узел build/bundle.js приводит к тому, что readline не является функцией, даже с внешними функциями: {readline: "require('readline')",}, в webpack.config.ts.
Мой src/main.ts очень прост:
const readline = require("node:readline");
console.log(readline());

Вот мой tsconfig.json:
{
"compilerOptions": {
"rootDir": ".",
"outDir": "./build",

"module": "nodenext",
"target": "esnext",
"lib": ["esnext"],
"types": ["node"],

// Other Outputs
"sourceMap": true,
"declaration": true,
"declarationMap": true,

"strict": true,
"isolatedModules": true,
"noUncheckedSideEffectImports": true,
"moduleDetection": "force",
"skipLibCheck": true
}
}

Для создания пакета я использую Webpack:
const path = require("path");

module.exports = {
entry: "./src/main.ts",
output: {
filename: "bundle.js", // Name of the bundled output file
path: path.resolve(__dirname, "build"), // Output directory
clean: true, // Clean the output directory before each build
},
resolve: {
extensions: [".ts"], // Resolve these file extensions when importing
},
module: {
rules: [
{
test: /\.tsx?$/, // Apply this rule to .ts and .tsx files
use: "ts-loader", // Use ts-loader to transpile TypeScript
exclude: /node_modules/, // Exclude dependencies
},
],
},
mode: "production",
target: "node",
};

Наконец, мой package.json выглядит следующим образом:
{
"name": "webpack-exe",
"version": "1.0.0",
"main": "main.ts",
"scripts": {
"build": "webpack"
},
"devDependencies": {
"@types/node": "^24.10.1",
"ts-loader": "^9.5.4",
"ts-node": "^10.9.2",
"typescript": "^5.9.3",
"webpack": "^5.103.0",
"webpack-cli": "^6.0.1"
}
}

Чего мне не хватает, чтобы просто создать узел build/bundle.js и скопировать и вставить его для CodinGame?
Мой текущий неработающий сгенерированный файл build/bundle.js:
(()=>{"use strict";var r={481:r=>{r.exports=require("node:readline")}},e={};function o(t){var s=e[t];if(void 0!==s)return s.exports;var n=e[t]={exports:{}};return r[t](n,n.exports,o),n.exports}(()=>{const r=o(481);console.log(r())})()})();

Я понимаю, почему это не работает, но не понимаю, почему Webpack генерирует это и как заставить его генерировать то, что я хочу.
TypeError: r is not a function
at /home/me/workspace/webpack-hell/build/bundle.js:1:227
at /home/me/workspace/webpack-hell/build/bundle.js:1:233
at Object. (/home/me/workspace/webpack-hell/build/bundle.js:1:237)
at Module._compile (node:internal/modules/cjs/loader:1529:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1613:10)
at Module.load (node:internal/modules/cjs/loader:1275:32)
at Module._load (node:internal/modules/cjs/loader:1096:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
at node:internal/main/run_main_module:28:49


Подробнее здесь: https://stackoverflow.com/questions/798 ... or-node-js
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»