Мне не нужен автономный исполняемый файл (./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
at Module._extensions..js (node:internal/modules/cjs/loader
at Module.load (node:internal/modules/cjs/loader
at Module._load (node:internal/modules/cjs/loader
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
Мобильная версия