vite 6.0.0-alpha.2 → 6.0.0-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/node/cli.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import path from 'node:path';
2
- import fs from 'node:fs';
2
+ import fs__default from 'node:fs';
3
3
  import { performance } from 'node:perf_hooks';
4
4
  import { EventEmitter } from 'events';
5
- import { E as colors, x as createLogger, r as resolveConfig, F as Environment } from './chunks/dep-E4cF1RpV.js';
5
+ import { I as colors, A as createLogger, r as resolveConfig } from './chunks/dep-CpuHsFvF.js';
6
6
  import { VERSION } from './constants.js';
7
7
  import 'node:fs/promises';
8
8
  import 'node:url';
@@ -12,7 +12,9 @@ import 'tty';
12
12
  import 'path';
13
13
  import 'esbuild';
14
14
  import 'fs';
15
- import 'assert';
15
+ import 'node:events';
16
+ import 'node:stream';
17
+ import 'node:string_decoder';
16
18
  import 'node:child_process';
17
19
  import 'node:http';
18
20
  import 'node:https';
@@ -26,12 +28,12 @@ import 'child_process';
26
28
  import 'node:os';
27
29
  import 'node:crypto';
28
30
  import 'node:dns';
31
+ import 'vite/module-runner';
32
+ import 'rollup/parseAst';
33
+ import 'module';
29
34
  import 'node:assert';
30
35
  import 'node:v8';
31
- import 'module';
32
36
  import 'node:worker_threads';
33
- import 'rollup/parseAst';
34
- import 'node:events';
35
37
  import 'crypto';
36
38
  import 'node:buffer';
37
39
  import 'node:readline';
@@ -39,6 +41,7 @@ import 'zlib';
39
41
  import 'buffer';
40
42
  import 'https';
41
43
  import 'tls';
44
+ import 'assert';
42
45
  import 'querystring';
43
46
  import 'node:zlib';
44
47
 
@@ -655,201 +658,183 @@ class CAC extends EventEmitter {
655
658
 
656
659
  const cac = (name = "") => new CAC(name);
657
660
 
658
- const cli = cac('vite');
661
+ const cli = cac("vite");
659
662
  let profileSession = global.__vite_profile_session;
660
663
  let profileCount = 0;
661
664
  const stopProfiler = (log) => {
662
- if (!profileSession)
663
- return;
664
- return new Promise((res, rej) => {
665
- profileSession.post('Profiler.stop', (err, { profile }) => {
666
- // Write profile to disk, upload, etc.
667
- if (!err) {
668
- const outPath = path.resolve(`./vite-profile-${profileCount++}.cpuprofile`);
669
- fs.writeFileSync(outPath, JSON.stringify(profile));
670
- log(colors.yellow(`CPU profile written to ${colors.white(colors.dim(outPath))}`));
671
- profileSession = undefined;
672
- res();
673
- }
674
- else {
675
- rej(err);
676
- }
677
- });
665
+ if (!profileSession) return;
666
+ return new Promise((res, rej) => {
667
+ profileSession.post("Profiler.stop", (err, { profile }) => {
668
+ if (!err) {
669
+ const outPath = path.resolve(
670
+ `./vite-profile-${profileCount++}.cpuprofile`
671
+ );
672
+ fs__default.writeFileSync(outPath, JSON.stringify(profile));
673
+ log(
674
+ colors.yellow(
675
+ `CPU profile written to ${colors.white(colors.dim(outPath))}`
676
+ )
677
+ );
678
+ profileSession = void 0;
679
+ res();
680
+ } else {
681
+ rej(err);
682
+ }
678
683
  });
684
+ });
679
685
  };
680
686
  const filterDuplicateOptions = (options) => {
681
- for (const [key, value] of Object.entries(options)) {
682
- if (Array.isArray(value)) {
683
- options[key] = value[value.length - 1];
684
- }
687
+ for (const [key, value] of Object.entries(options)) {
688
+ if (Array.isArray(value)) {
689
+ options[key] = value[value.length - 1];
685
690
  }
691
+ }
686
692
  };
687
- /**
688
- * removing global flags before passing as command specific sub-configs
689
- */
690
693
  function cleanGlobalCLIOptions(options) {
691
- const ret = { ...options };
692
- delete ret['--'];
693
- delete ret.c;
694
- delete ret.config;
695
- delete ret.base;
696
- delete ret.l;
697
- delete ret.logLevel;
698
- delete ret.clearScreen;
699
- delete ret.d;
700
- delete ret.debug;
701
- delete ret.f;
702
- delete ret.filter;
703
- delete ret.m;
704
- delete ret.mode;
705
- // convert the sourcemap option to a boolean if necessary
706
- if ('sourcemap' in ret) {
707
- const sourcemap = ret.sourcemap;
708
- ret.sourcemap =
709
- sourcemap === 'true'
710
- ? true
711
- : sourcemap === 'false'
712
- ? false
713
- : ret.sourcemap;
714
- }
715
- return ret;
694
+ const ret = { ...options };
695
+ delete ret["--"];
696
+ delete ret.c;
697
+ delete ret.config;
698
+ delete ret.base;
699
+ delete ret.l;
700
+ delete ret.logLevel;
701
+ delete ret.clearScreen;
702
+ delete ret.d;
703
+ delete ret.debug;
704
+ delete ret.f;
705
+ delete ret.filter;
706
+ delete ret.m;
707
+ delete ret.mode;
708
+ if ("sourcemap" in ret) {
709
+ const sourcemap = ret.sourcemap;
710
+ ret.sourcemap = sourcemap === "true" ? true : sourcemap === "false" ? false : ret.sourcemap;
711
+ }
712
+ return ret;
716
713
  }
717
- /**
718
- * removing builder flags before passing as command specific sub-configs
719
- */
720
714
  function cleanBuilderCLIOptions(options) {
721
- const ret = { ...options };
722
- delete ret.environment;
723
- delete ret.all;
724
- return ret;
715
+ const ret = { ...options };
716
+ delete ret.app;
717
+ return ret;
725
718
  }
726
- /**
727
- * host may be a number (like 0), should convert to string
728
- */
729
719
  const convertHost = (v) => {
730
- if (typeof v === 'number') {
731
- return String(v);
732
- }
733
- return v;
720
+ if (typeof v === "number") {
721
+ return String(v);
722
+ }
723
+ return v;
734
724
  };
735
- /**
736
- * base may be a number (like 0), should convert to empty string
737
- */
738
725
  const convertBase = (v) => {
739
- if (v === 0) {
740
- return '';
741
- }
742
- return v;
726
+ if (v === 0) {
727
+ return "";
728
+ }
729
+ return v;
743
730
  };
744
- cli
745
- .option('-c, --config <file>', `[string] use specified config file`)
746
- .option('--base <path>', `[string] public base path (default: /)`, {
747
- type: [convertBase],
748
- })
749
- .option('-l, --logLevel <level>', `[string] info | warn | error | silent`)
750
- .option('--clearScreen', `[boolean] allow/disable clear screen when logging`)
751
- .option('-d, --debug [feat]', `[string | boolean] show debug logs`)
752
- .option('-f, --filter <filter>', `[string] filter debug logs`)
753
- .option('-m, --mode <mode>', `[string] set env mode`);
754
- // dev
755
- cli
756
- .command('[root]', 'start dev server') // default command
757
- .alias('serve') // the command is called 'serve' in Vite's API
758
- .alias('dev') // alias to align with the script name
759
- .option('--host [host]', `[string] specify hostname`, { type: [convertHost] })
760
- .option('--port <port>', `[number] specify port`)
761
- .option('--open [path]', `[boolean | string] open browser on startup`)
762
- .option('--cors', `[boolean] enable CORS`)
763
- .option('--strictPort', `[boolean] exit if specified port is already in use`)
764
- .option('--force', `[boolean] force the optimizer to ignore the cache and re-bundle`)
765
- .action(async (root, options) => {
766
- filterDuplicateOptions(options);
767
- // output structure is preserved even after bundling so require()
768
- // is ok here
769
- const { createServer } = await import('./chunks/dep-E4cF1RpV.js').then(function (n) { return n.I; });
770
- try {
771
- const server = await createServer({
772
- root,
773
- base: options.base,
774
- mode: options.mode,
775
- configFile: options.config,
776
- logLevel: options.logLevel,
777
- clearScreen: options.clearScreen,
778
- optimizeDeps: { force: options.force },
779
- server: cleanGlobalCLIOptions(options),
780
- });
781
- if (!server.httpServer) {
782
- throw new Error('HTTP server not available');
783
- }
784
- await server.listen();
785
- const info = server.config.logger.info;
786
- const viteStartTime = global.__vite_start_time ?? false;
787
- const startupDurationString = viteStartTime
788
- ? colors.dim(`ready in ${colors.reset(colors.bold(Math.ceil(performance.now() - viteStartTime)))} ms`)
789
- : '';
790
- const hasExistingLogs = process.stdout.bytesWritten > 0 || process.stderr.bytesWritten > 0;
791
- info(`\n ${colors.green(`${colors.bold('VITE')} v${VERSION}`)} ${startupDurationString}\n`, {
792
- clear: !hasExistingLogs,
793
- });
794
- server.printUrls();
795
- const customShortcuts = [];
796
- if (profileSession) {
797
- customShortcuts.push({
798
- key: 'p',
799
- description: 'start/stop the profiler',
800
- async action(server) {
801
- if (profileSession) {
802
- await stopProfiler(server.config.logger.info);
803
- }
804
- else {
805
- const inspector = await import('node:inspector').then((r) => r.default);
806
- await new Promise((res) => {
807
- profileSession = new inspector.Session();
808
- profileSession.connect();
809
- profileSession.post('Profiler.enable', () => {
810
- profileSession.post('Profiler.start', () => {
811
- server.config.logger.info('Profiler started');
812
- res();
813
- });
814
- });
815
- });
816
- }
817
- },
731
+ cli.option("-c, --config <file>", `[string] use specified config file`).option("--base <path>", `[string] public base path (default: /)`, {
732
+ type: [convertBase]
733
+ }).option("-l, --logLevel <level>", `[string] info | warn | error | silent`).option("--clearScreen", `[boolean] allow/disable clear screen when logging`).option("-d, --debug [feat]", `[string | boolean] show debug logs`).option("-f, --filter <filter>", `[string] filter debug logs`).option("-m, --mode <mode>", `[string] set env mode`);
734
+ cli.command("[root]", "start dev server").alias("serve").alias("dev").option("--host [host]", `[string] specify hostname`, { type: [convertHost] }).option("--port <port>", `[number] specify port`).option("--open [path]", `[boolean | string] open browser on startup`).option("--cors", `[boolean] enable CORS`).option("--strictPort", `[boolean] exit if specified port is already in use`).option(
735
+ "--force",
736
+ `[boolean] force the optimizer to ignore the cache and re-bundle`
737
+ ).action(async (root, options) => {
738
+ filterDuplicateOptions(options);
739
+ const { createServer } = await import('./chunks/dep-CpuHsFvF.js').then(function (n) { return n.M; });
740
+ try {
741
+ const server = await createServer({
742
+ root,
743
+ base: options.base,
744
+ mode: options.mode,
745
+ configFile: options.config,
746
+ logLevel: options.logLevel,
747
+ clearScreen: options.clearScreen,
748
+ optimizeDeps: { force: options.force },
749
+ server: cleanGlobalCLIOptions(options)
750
+ });
751
+ if (!server.httpServer) {
752
+ throw new Error("HTTP server not available");
753
+ }
754
+ await server.listen();
755
+ const info = server.config.logger.info;
756
+ const viteStartTime = global.__vite_start_time ?? false;
757
+ const startupDurationString = viteStartTime ? colors.dim(
758
+ `ready in ${colors.reset(
759
+ colors.bold(Math.ceil(performance.now() - viteStartTime))
760
+ )} ms`
761
+ ) : "";
762
+ const hasExistingLogs = process.stdout.bytesWritten > 0 || process.stderr.bytesWritten > 0;
763
+ info(
764
+ `
765
+ ${colors.green(
766
+ `${colors.bold("VITE")} v${VERSION}`
767
+ )} ${startupDurationString}
768
+ `,
769
+ {
770
+ clear: !hasExistingLogs
771
+ }
772
+ );
773
+ server.printUrls();
774
+ const customShortcuts = [];
775
+ if (profileSession) {
776
+ customShortcuts.push({
777
+ key: "p",
778
+ description: "start/stop the profiler",
779
+ async action(server2) {
780
+ if (profileSession) {
781
+ await stopProfiler(server2.config.logger.info);
782
+ } else {
783
+ const inspector = await import('node:inspector').then(
784
+ (r) => r.default
785
+ );
786
+ await new Promise((res) => {
787
+ profileSession = new inspector.Session();
788
+ profileSession.connect();
789
+ profileSession.post("Profiler.enable", () => {
790
+ profileSession.post("Profiler.start", () => {
791
+ server2.config.logger.info("Profiler started");
792
+ res();
793
+ });
794
+ });
818
795
  });
796
+ }
819
797
  }
820
- server.bindCLIShortcuts({ print: true, customShortcuts });
821
- }
822
- catch (e) {
823
- const logger = createLogger(options.logLevel);
824
- logger.error(colors.red(`error when starting dev server:\n${e.stack}`), {
825
- error: e,
826
- });
827
- stopProfiler(logger.info);
828
- process.exit(1);
798
+ });
829
799
  }
800
+ server.bindCLIShortcuts({ print: true, customShortcuts });
801
+ } catch (e) {
802
+ const logger = createLogger(options.logLevel);
803
+ logger.error(colors.red(`error when starting dev server:
804
+ ${e.stack}`), {
805
+ error: e
806
+ });
807
+ stopProfiler(logger.info);
808
+ process.exit(1);
809
+ }
830
810
  });
831
- // build
832
- cli
833
- .command('build [root]', 'build for production')
834
- .option('--target <target>', `[string] transpile target (default: 'modules')`)
835
- .option('--outDir <dir>', `[string] output directory (default: dist)`)
836
- .option('--assetsDir <dir>', `[string] directory under outDir to place assets in (default: assets)`)
837
- .option('--assetsInlineLimit <number>', `[number] static asset base64 inline threshold in bytes (default: 4096)`)
838
- .option('--ssr [entry]', `[string] build specified entry for server-side rendering`)
839
- .option('--sourcemap [output]', `[boolean | "inline" | "hidden"] output source maps for build (default: false)`)
840
- .option('--minify [minifier]', `[boolean | "terser" | "esbuild"] enable/disable minification, ` +
841
- `or specify minifier to use (default: esbuild)`)
842
- .option('--manifest [name]', `[boolean | string] emit build manifest json`)
843
- .option('--ssrManifest [name]', `[boolean | string] emit ssr manifest json`)
844
- .option('--emptyOutDir', `[boolean] force empty outDir when it's outside of root`)
845
- .option('-w, --watch', `[boolean] rebuilds when modules have changed on disk`)
846
- .option('--environment [name]', `[string] build a single environment`)
847
- .option('--all', `[boolean] build all environments`)
848
- .action(async (root, options) => {
811
+ cli.command("build [root]", "build for production").option("--target <target>", `[string] transpile target (default: 'modules')`).option("--outDir <dir>", `[string] output directory (default: dist)`).option(
812
+ "--assetsDir <dir>",
813
+ `[string] directory under outDir to place assets in (default: assets)`
814
+ ).option(
815
+ "--assetsInlineLimit <number>",
816
+ `[number] static asset base64 inline threshold in bytes (default: 4096)`
817
+ ).option(
818
+ "--ssr [entry]",
819
+ `[string] build specified entry for server-side rendering`
820
+ ).option(
821
+ "--sourcemap [output]",
822
+ `[boolean | "inline" | "hidden"] output source maps for build (default: false)`
823
+ ).option(
824
+ "--minify [minifier]",
825
+ `[boolean | "terser" | "esbuild"] enable/disable minification, or specify minifier to use (default: esbuild)`
826
+ ).option("--manifest [name]", `[boolean | string] emit build manifest json`).option("--ssrManifest [name]", `[boolean | string] emit ssr manifest json`).option(
827
+ "--emptyOutDir",
828
+ `[boolean] force empty outDir when it's outside of root`
829
+ ).option("-w, --watch", `[boolean] rebuilds when modules have changed on disk`).option("--app", `[boolean] same as builder.entireApp`).action(
830
+ async (root, options) => {
849
831
  filterDuplicateOptions(options);
850
- const { build, createViteBuilder } = await import('./chunks/dep-E4cF1RpV.js').then(function (n) { return n.K; });
851
- const buildOptions = cleanGlobalCLIOptions(cleanBuilderCLIOptions(options));
852
- const config = {
832
+ const build = await import('./chunks/dep-CpuHsFvF.js').then(function (n) { return n.N; });
833
+ const buildOptions = cleanGlobalCLIOptions(
834
+ cleanBuilderCLIOptions(options)
835
+ );
836
+ try {
837
+ const inlineConfig = {
853
838
  root,
854
839
  base: options.base,
855
840
  mode: options.mode,
@@ -857,96 +842,106 @@ cli
857
842
  logLevel: options.logLevel,
858
843
  clearScreen: options.clearScreen,
859
844
  build: buildOptions,
860
- };
861
- try {
862
- if (options.all || options.environment) {
863
- const builder = await createViteBuilder({}, config);
864
- if (options.environment) {
865
- const environment = builder.environments[options.environment];
866
- if (!environment) {
867
- throw new Error(`The environment ${options.environment} isn't configured.`);
868
- }
869
- await builder.build(environment);
870
- }
871
- else {
872
- // --all: build all environments
873
- await builder.buildEnvironments();
874
- }
845
+ ...options.app ? { builder: { entireApp: true } } : {}
846
+ };
847
+ const patchConfig = (resolved) => {
848
+ if (resolved.builder.entireApp) {
849
+ return;
875
850
  }
876
- else {
877
- await build(config);
878
- }
879
- }
880
- catch (e) {
881
- createLogger(options.logLevel).error(colors.red(`error during build:\n${e.stack}`), { error: e });
882
- process.exit(1);
883
- }
884
- finally {
885
- stopProfiler((message) => createLogger(options.logLevel).info(message));
886
- }
887
- });
888
- // optimize
889
- cli
890
- .command('optimize [root]', 'pre-bundle dependencies')
891
- .option('--force', `[boolean] force the optimizer to ignore the cache and re-bundle`)
892
- .action(async (root, options) => {
851
+ const environmentName = resolved.build.ssr ? "ssr" : "client";
852
+ resolved.build = {
853
+ ...resolved.environments[environmentName].build
854
+ };
855
+ };
856
+ const config = await build.resolveConfigToBuild(
857
+ inlineConfig,
858
+ patchConfig
859
+ );
860
+ if (config.builder.entireApp) {
861
+ const builder = await build.createBuilderWithResolvedConfig(
862
+ inlineConfig,
863
+ config
864
+ );
865
+ await builder.buildApp();
866
+ } else {
867
+ await build.buildWithResolvedConfig(config);
868
+ }
869
+ } catch (e) {
870
+ createLogger(options.logLevel).error(
871
+ colors.red(`error during build:
872
+ ${e.stack}`),
873
+ { error: e }
874
+ );
875
+ process.exit(1);
876
+ } finally {
877
+ stopProfiler((message) => createLogger(options.logLevel).info(message));
878
+ }
879
+ }
880
+ );
881
+ cli.command("optimize [root]", "pre-bundle dependencies").option(
882
+ "--force",
883
+ `[boolean] force the optimizer to ignore the cache and re-bundle`
884
+ ).action(
885
+ async (root, options) => {
893
886
  filterDuplicateOptions(options);
894
- const { optimizeDeps } = await import('./chunks/dep-E4cF1RpV.js').then(function (n) { return n.J; });
887
+ const { optimizeDeps } = await import('./chunks/dep-CpuHsFvF.js').then(function (n) { return n.L; });
895
888
  try {
896
- const config = await resolveConfig({
897
- root,
898
- base: options.base,
899
- configFile: options.config,
900
- logLevel: options.logLevel,
901
- mode: options.mode,
902
- }, 'serve');
903
- const environment = new Environment('client', config);
904
- await optimizeDeps(environment, options.force, true);
905
- }
906
- catch (e) {
907
- createLogger(options.logLevel).error(colors.red(`error when optimizing deps:\n${e.stack}`), { error: e });
908
- process.exit(1);
909
- }
910
- });
911
- // preview
912
- cli
913
- .command('preview [root]', 'locally preview production build')
914
- .option('--host [host]', `[string] specify hostname`, { type: [convertHost] })
915
- .option('--port <port>', `[number] specify port`)
916
- .option('--strictPort', `[boolean] exit if specified port is already in use`)
917
- .option('--open [path]', `[boolean | string] open browser on startup`)
918
- .option('--outDir <dir>', `[string] output directory (default: dist)`)
919
- .action(async (root, options) => {
889
+ const config = await resolveConfig(
890
+ {
891
+ root,
892
+ base: options.base,
893
+ configFile: options.config,
894
+ logLevel: options.logLevel,
895
+ mode: options.mode
896
+ },
897
+ "serve"
898
+ );
899
+ await optimizeDeps(config, options.force, true);
900
+ } catch (e) {
901
+ createLogger(options.logLevel).error(
902
+ colors.red(`error when optimizing deps:
903
+ ${e.stack}`),
904
+ { error: e }
905
+ );
906
+ process.exit(1);
907
+ }
908
+ }
909
+ );
910
+ cli.command("preview [root]", "locally preview production build").option("--host [host]", `[string] specify hostname`, { type: [convertHost] }).option("--port <port>", `[number] specify port`).option("--strictPort", `[boolean] exit if specified port is already in use`).option("--open [path]", `[boolean | string] open browser on startup`).option("--outDir <dir>", `[string] output directory (default: dist)`).action(
911
+ async (root, options) => {
920
912
  filterDuplicateOptions(options);
921
- const { preview } = await import('./chunks/dep-E4cF1RpV.js').then(function (n) { return n.L; });
913
+ const { preview } = await import('./chunks/dep-CpuHsFvF.js').then(function (n) { return n.O; });
922
914
  try {
923
- const server = await preview({
924
- root,
925
- base: options.base,
926
- configFile: options.config,
927
- logLevel: options.logLevel,
928
- mode: options.mode,
929
- build: {
930
- outDir: options.outDir,
931
- },
932
- preview: {
933
- port: options.port,
934
- strictPort: options.strictPort,
935
- host: options.host,
936
- open: options.open,
937
- },
938
- });
939
- server.printUrls();
940
- server.bindCLIShortcuts({ print: true });
941
- }
942
- catch (e) {
943
- createLogger(options.logLevel).error(colors.red(`error when starting preview server:\n${e.stack}`), { error: e });
944
- process.exit(1);
945
- }
946
- finally {
947
- stopProfiler((message) => createLogger(options.logLevel).info(message));
948
- }
949
- });
915
+ const server = await preview({
916
+ root,
917
+ base: options.base,
918
+ configFile: options.config,
919
+ logLevel: options.logLevel,
920
+ mode: options.mode,
921
+ build: {
922
+ outDir: options.outDir
923
+ },
924
+ preview: {
925
+ port: options.port,
926
+ strictPort: options.strictPort,
927
+ host: options.host,
928
+ open: options.open
929
+ }
930
+ });
931
+ server.printUrls();
932
+ server.bindCLIShortcuts({ print: true });
933
+ } catch (e) {
934
+ createLogger(options.logLevel).error(
935
+ colors.red(`error when starting preview server:
936
+ ${e.stack}`),
937
+ { error: e }
938
+ );
939
+ process.exit(1);
940
+ } finally {
941
+ stopProfiler((message) => createLogger(options.logLevel).info(message));
942
+ }
943
+ }
944
+ );
950
945
  cli.help();
951
946
  cli.version(VERSION);
952
947
  cli.parse();