El paquete web no reconoce el módulo de proceso de Node

Después de no tocar Javascript durante más de una década, tuve una idea para una aplicación que funcionaría mejor cuando se implementara como una aplicación NodeJS. Leí sobre el ecosistema moderno de JS y, como la mayoría de las personas, estoy completamente confundido, jaja.

Parece que la combinación de NodeJS, TypeScript y Webpack es una buena manera de hacerlo, pero tengo problemas incluso para que un simple Hello World funcione.

El único archivo de TypeScript que escribí, ./src/run_task.ts :

 // #!/usr/bin/env node /** * @file Main application file. Users start the app by running `node dist/run_task.js` * @author Gerard Leenhouts */ import * as process from "process"; function main(): number { console.log(process); console.log(`Got ${process.argv.length} arguments.`); return 42; } main(); 

Cuando ejecuto tsc manualmente ( tsc -p server.tsconfig.json ) funciona bien, pero cuando ejecuto webpack parece crear su propia definición del módulo de process en el archivo .js resultante. Aquí hay una parte de esto:

 process.nextTick = function (fun) { var args = new Array(arguments.length - 1); if (arguments.length > 1) { for (var i = 1; i < arguments.length; i++) { args[i - 1] = arguments[i]; } } queue.push(new Item(fun, args)); if (queue.length === 1 && !draining) { runTimeout(drainQueue); } }; // v8 likes predictible objects function Item(fun, array) { this.fun = fun; this.array = array; } Item.prototype.run = function () { this.fun.apply(null, this.array); }; process.title = 'browser'; process.browser = true; process.env = {}; process.argv = []; process.version = ''; // empty string to avoid regexp issues process.versions = {}; function noop() {} process.on = noop; process.addListener = noop; process.once = noop; process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; process.prependListener = noop; process.prependOnceListener = noop; process.listeners = function (name) { return [] } process.binding = function (name) { throw new Error('process.binding is not supported'); }; process.cwd = function () { return '/' }; process.chdir = function (dir) { throw new Error('process.chdir is not supported'); }; process.umask = function() { return 0; }; 

Mi package.json :

 { "name": "startpage", "version": "1.0.0", "description": "Self hosted web app to function as a web browser startpage", "main": "run_task.js", "scripts": { "build": "webpack", "start": "node dist/run_task.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Gerard Leenhouts", "license": "ISC", "devDependencies": { "@types/node": "^9.4.6", "ts-loader": "^3.5.0", "typescript": "^2.7.2", "webpack": "^3.11.0" } } 

Mi webpack.config.js :

 const path = require('path'); module.exports = [ { // devtool: 'inline-source-map', entry: './src/run_task.ts', module: { rules: [ { test: /\.tsx?$/, use: [ { loader: 'ts-loader', options: { configFile: 'server.tsconfig.json' } } ], exclude: /node_modules/ } ] }, resolve: { extensions: [ '.ts', '.tsx', '.js' ] }, output: { filename: 'run_task.js', path: path.resolve(__dirname, 'dist') } } ]; 

Mi server.tsconfig.json :

 { "compilerOptions": { // "sourceMap": true, "outDir": "./dist/", "strict": true, "noImplicitAny": true, "target": "es6", "module": "commonjs", "moduleResolution": "node", "esModuleInterop": true, "baseUrl": "./", "paths": { "*": ["node_modules/*", "src/types/*"] }, "removeComments": true }, "include": [ "./src/**/*" ] } 

He estado revisando la documentación de Webpack y TypeScript durante horas, y parece que no puedo resolverlo. Es muy posible que esté pasando por alto algo simple pero ya no puedo ver el bosque por los árboles. Obviamente, tiene algo que ver con la resolución del módulo, pero todo parece estar bien en los archivos de configuración, por lo que puedo decir. ¡Cualquier ayuda se agradece, gracias por adelantado!

Parece que crea su propia definición del módulo de proceso en el archivo .js resultante

En su webpack.config.js , debe establecer el target en node . Solo agregue target: 'node' al mismo nivel que la output . Esto se comstackrá para su uso en un entorno similar a Node.js (los usos que Node.js requiere para cargar trozos y no tocar ningún módulo integrado como el proceso, fs, etc.). Docs aquí: https://webpack.js.org/concepts/targets/