pobpack-node
Version:
Build and run node projects with webpack.
1 lines • 15.3 kB
Source Map (JSON)
{"version":3,"file":"cli-node12-dev.mjs","sources":["../src/createNodeWebpackConfig.ts","../src/index.ts","../src/cli.ts"],"sourcesContent":["// const fs = require('fs');\nimport fs from 'fs';\nimport path from 'path';\nimport type {\n ConfigEntry,\n Options,\n FilledWebpackConfiguration,\n} from 'pobpack-types';\nimport {\n webpack,\n createModuleConfig,\n createPluginsConfig,\n createResolveConfig,\n} from 'pobpack-utils';\nimport type { ExternalsFunctionElement } from 'webpack';\nimport type { Options as NodeExternalsOptions } from 'webpack-node-externals';\nimport nodeExternals from 'webpack-node-externals';\n\nconst ExcludesFalsy = (Boolean as any) as <T>(\n x: T | false | null | undefined,\n) => x is T;\n\nconst createExternals = (options: Options): ExternalsFunctionElement[] => {\n const baseOptions: NodeExternalsOptions = {\n importType: 'commonjs',\n modulesFromFile: false,\n allowlist: [\n require.resolve('../hot'),\n ...options.includeModules.map(\n (module: string) => new RegExp(`^${module}(/|$)`),\n ),\n ].concat(\n options.allowlistExternalExtensions\n ? [new RegExp(`(${options.allowlistExternalExtensions.join('|')})$`)]\n : [],\n ),\n };\n\n const nodeModulesPaths = [];\n let p = process.cwd();\n do {\n const nodeModulesCurrentPath = path.join(p, 'node_modules');\n if (fs.existsSync(nodeModulesCurrentPath)) {\n nodeModulesPaths.push(nodeModulesCurrentPath);\n }\n p = path.dirname(p);\n } while (p !== '/');\n\n return nodeModulesPaths.map((nodeModulesPath) =>\n nodeExternals({ ...baseOptions, modulesDir: nodeModulesPath }),\n );\n};\n\nexport default function createNodeWebpackConfig(\n options: Options,\n): FilledWebpackConfiguration {\n return {\n // production or development\n mode: options.env === 'production' ? 'production' : 'development',\n\n // Don't attempt to continue if there are any errors.\n bail: options.env === 'production',\n\n // Target node\n target: 'node',\n\n // get right stack traces\n devtool: 'source-map',\n\n optimization: {\n noEmitOnErrors: true,\n minimize: false,\n ...options.optimization,\n },\n\n // don't bundle node_modules dependencies\n externals: createExternals(options),\n\n // __dirname and __filename\n node: {\n __filename: true,\n __dirname: true,\n },\n\n // use cache\n cache: options.hmr,\n\n // bundle size is not relevant for node\n performance: {\n hints: false,\n },\n\n resolveLoader: {\n modules: options.resolveLoaderModules || ['node_modules'],\n },\n\n resolve: createResolveConfig(['node'], {\n ...options,\n babel: {\n presets: [require.resolve('../babel')],\n ...options.babel,\n },\n }),\n\n entry: options.entries.reduce(\n (entries: { [key: string]: string[] }, entry: ConfigEntry) => {\n if (typeof entry === 'string') entry = { key: entry, path: entry };\n entries[entry.key] = [\n options.hmr ? require.resolve('../hot') : undefined,\n path.join(path.resolve(options.paths.src as string), entry.path),\n ].filter(ExcludesFalsy);\n return entries;\n },\n {},\n ),\n\n output: {\n path: path.resolve(options.paths.build as string),\n libraryTarget: 'commonjs2',\n devtoolModuleFilenameTemplate: '[absolute-resource-path]',\n },\n\n module: createModuleConfig(options),\n\n plugins: createPluginsConfig({\n ...options,\n prependPlugins: [\n options.hmr && new webpack.HotModuleReplacementPlugin(),\n ...(options.prependPlugins || []),\n ],\n\n plugins: [\n options.hmr &&\n new webpack.BannerPlugin({\n banner: `require(\"${require.resolve('../source-map-support')}\");`,\n raw: true,\n entryOnly: false,\n include: /\\.js$/,\n }),\n ...options.plugins,\n ],\n }),\n };\n}\n","import { join } from 'path';\nimport debounce from 'debounce';\nimport type {\n CreateCompilerOptions,\n Options,\n PobpackCompiler,\n WatchCallback,\n} from 'pobpack-types';\nimport { createPobpackCompiler, createAppWebpackConfig } from 'pobpack-utils';\nimport type { Daemon } from 'springbokjs-daemon';\nimport createDaemon from 'springbokjs-daemon';\nimport type { Stats, Watching } from 'webpack';\nimport createNodeWebpackConfig from './createNodeWebpackConfig';\n\nexport const createAppNodeCompiler = (\n options: Partial<Options>,\n compilerOptions?: CreateCompilerOptions,\n): PobpackCompiler =>\n createPobpackCompiler(\n 'node',\n createAppWebpackConfig(createNodeWebpackConfig)(options),\n compilerOptions,\n );\n\nexport const build = (options = {}): Promise<Stats | undefined> => {\n if (!process.env.NODE_ENV) process.env.NODE_ENV = 'production';\n const compiler = createAppNodeCompiler({ ...options, hmr: false });\n compiler.clean();\n return compiler.run();\n};\n\nexport const watch = (\n options: Partial<Options>,\n callback: WatchCallback,\n): PobpackCompiler => {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n const compiler = createAppNodeCompiler({ ...options, hmr: true });\n compiler.clean();\n compiler.watch(callback);\n return compiler;\n};\n\nexport interface RunOptions {\n nodeArgs?: (string | number)[];\n args?: (string | number)[];\n cwd?: string;\n displayName?: string;\n key?: string;\n}\n\nexport const watchAndRunCompiler = (\n compiler: PobpackCompiler,\n options: RunOptions = {},\n): Watching => {\n let daemon: Daemon;\n let hadError = false;\n const debounceRestart = debounce(() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n daemon.restart();\n }, 1000);\n const daemonStop = (): void => {\n debounceRestart.clear();\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n daemon.stop();\n };\n const watchingCompiler = compiler.watch((stats) => {\n const hasErrors = stats ? stats.hasErrors() : false;\n\n if (hasErrors) {\n hadError = true;\n return;\n }\n\n if (!daemon) {\n daemon = createDaemon({\n key: options.key || 'pobpack-node',\n displayName: options.displayName,\n cwd: options.cwd,\n args: [\n ...(options.nodeArgs || []),\n join(\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n (compiler.webpackConfig.output &&\n compiler.webpackConfig.output.path) ||\n '',\n ),\n ...(options.args || []),\n ],\n // autoRestart: true,\n });\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n daemon.start();\n process.on('exit', daemonStop);\n } else if (daemon.hasExited()) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n daemon.start();\n } else if (hadError) {\n debounceRestart();\n } else {\n // already started, send a signal to ask hot reload\n try {\n daemon.sendSIGUSR2();\n } catch {\n debounceRestart();\n }\n }\n hadError = false;\n });\n\n return {\n invalidate: () => {\n watchingCompiler.invalidate();\n },\n close: (callback) => {\n if (daemon) {\n daemonStop();\n process.off('exit', daemonStop);\n }\n watchingCompiler.close(callback);\n },\n };\n};\n\nexport const watchAndRun = (options?: Partial<Options>): PobpackCompiler => {\n const compiler = createAppNodeCompiler({ ...options, hmr: true });\n compiler.clean();\n watchAndRunCompiler(compiler);\n return compiler;\n};\n","/* eslint-disable unicorn/no-process-exit */\nimport { build, watchAndRun } from '.';\n\nconst cmd = process.argv[2];\n\nif (cmd === 'build') {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n build();\n} else if (cmd === 'start' || !cmd) {\n watchAndRun();\n} else {\n console.log(`Invalid command: ${cmd}`);\n process.exit(1);\n}\n"],"names":["ExcludesFalsy","Boolean","createExternals","options","baseOptions","importType","modulesFromFile","allowlist","require","resolve","includeModules","map","module","RegExp","concat","allowlistExternalExtensions","join","nodeModulesPaths","p","process","cwd","nodeModulesCurrentPath","path","fs","existsSync","push","dirname","nodeModulesPath","nodeExternals","modulesDir","createNodeWebpackConfig","mode","env","bail","target","devtool","optimization","noEmitOnErrors","minimize","externals","node","__filename","__dirname","cache","hmr","performance","hints","resolveLoader","modules","resolveLoaderModules","createResolveConfig","babel","presets","entry","entries","reduce","key","undefined","paths","src","filter","output","build","libraryTarget","devtoolModuleFilenameTemplate","createModuleConfig","plugins","createPluginsConfig","prependPlugins","webpack","HotModuleReplacementPlugin","BannerPlugin","banner","raw","entryOnly","include","createAppNodeCompiler","compilerOptions","createPobpackCompiler","createAppWebpackConfig","NODE_ENV","compiler","clean","run","watchAndRunCompiler","daemon","hadError","debounceRestart","debounce","restart","daemonStop","clear","stop","watchingCompiler","watch","stats","hasErrors","createDaemon","displayName","args","nodeArgs","webpackConfig","start","on","hasExited","sendSIGUSR2","invalidate","close","callback","off","watchAndRun","cmd","argv","console","log","exit"],"mappings":"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"}