Tengo una pregunta para usted: ¿cómo es posible implementar la compilación de varios archivos mientras se conserva el árbol de carpetas y documentos, sin escribir cada archivo en la entry de esta manera?
entry: { index:'./src/index.ts', 'bot/main':'./src/bot/main.ts' }Pero al mismo tiempo, los archivos tenían sus nombres y su posición, como antes de la compilación en js, solo que en lugar de la carpeta src, ¿estaban en la carpeta dist?
Mi configuración actual webpack.config.js
const path = require('path') const nodeExternals = require('webpack-node-externals') const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin') module.exports = { context: __dirname, entry: { index:'./src/index.ts', 'bot/main':'./src/bot/main.ts' }, externals: [nodeExternals()], module: { rules: [ { exclude: /node_modules/, test: /.ts$/, use: { loader: 'ts-loader' } } ] }, node: { __dirname: false }, resolve: { extensions: ['.ts', '.js'], plugins: [ new TsconfigPathsPlugin({ baseUrl: './src' }) ] }, output: { filename: '[name]js', path: path.resolve(__dirname, 'dist'), publicPath: '/dist/' }, target: 'node' } Y al compilar en modo de production , todo esto se compiló en un archivo, teniendo en cuenta todas las URL, importaciones, etc.
¿Es posible?
Webpack en sí no hará eso por ti. Deberá escribir la función de ayudante de basura para lograr esto. La idea básica es rastrear el directorio, encontrar todos los archivos y luego proporcionarlos a Webpack:
const path = require('path'); const glob = require('glob'); const extension = 'ts'; // Recursively find all the `.ts` files inside src folder. const matchedFiles = glob.sync(`./src/**/*.${extension}`, { nodir: true }); const entry = {}; matchedFiles.forEach((file) => { const SRC_FOLDER = path.join(__dirname, 'src'); const ABS_PATH = path.join(__dirname, file); // Generates relative file paths like `src/test/file.ts` const relativeFile = path.relative(SRC_FOLDER, ABS_PATH); // fileKey is relative filename without extension. // Eg `src/test/file.ts` becomes `src/test/file` const fileKey = path.join(path.dirname(relativeFile), path.basename(relativeFile, extension)); entry[fileKey] = relativeFile; }); module.exports = { context: __dirname, // Use the entry object generated above. entry, // ... rest of the configuration };