diff --git a/packages/webpack5/src/helpers/errors.ts b/packages/webpack5/src/helpers/errors.ts new file mode 100644 index 000000000..0dbca3e38 --- /dev/null +++ b/packages/webpack5/src/helpers/errors.ts @@ -0,0 +1,11 @@ +// todo: refine +export function error(message: string, info?: { possibleCauses?: string[] }) { + console.error(` + NativeScript Webpack encountered an error and cannot proceed with the build: + + ${message} + + Possible causes: + ${info?.possibleCauses?.map((cause) => `- ${cause}`).join('\n')} + `); +} diff --git a/packages/webpack5/src/helpers/flavor.ts b/packages/webpack5/src/helpers/flavor.ts new file mode 100644 index 000000000..202dd67eb --- /dev/null +++ b/packages/webpack5/src/helpers/flavor.ts @@ -0,0 +1,18 @@ +import { defaultConfigs } from '@nativescript/webpack'; + +export function determineProjectFlavor(): keyof typeof defaultConfigs { + // todo; + + // error(` + // Could not determine project flavor. + // + // Please use webpack.useConfig('') to explicitly set the base config. + // `, { + // possibleCauses: [ + // 'Not in a NativeScript project', + // 'The project is not at the current working directory' + // ] + // }) + + return 'vue'; +} diff --git a/packages/webpack5/src/index.ts b/packages/webpack5/src/index.ts index 5f83d0968..266809741 100644 --- a/packages/webpack5/src/index.ts +++ b/packages/webpack5/src/index.ts @@ -1,6 +1,7 @@ import Config from 'webpack-chain'; -import webpack, { config } from 'webpack'; +import webpack from 'webpack'; import { configs } from './configuration'; +import { determineProjectFlavor } from './helpers/flavor'; export type Platform = 'android' | 'ios' | string; @@ -22,6 +23,7 @@ export interface IWebpackEnv { let webpackChains: any[] = []; let webpackMerges: any[] = []; let env: IWebpackEnv = {}; +let explicitUseConfig = false; ////// PUBLIC API export const defaultConfigs = configs; @@ -30,10 +32,10 @@ export function init(_env: IWebpackEnv) { if (_env) { env = _env; } - // todo: determine default config based on deps and print **useful** error if it fails. } export function useConfig(config: keyof typeof defaultConfigs) { + explicitUseConfig = true; webpackChains.push(configs[config]); } @@ -48,6 +50,10 @@ export function mergeWebpack(mergeFn: (config: Partial, e export function resolveChainableConfig() { const config = new Config(); + if (!explicitUseConfig) { + useConfig(determineProjectFlavor()); + } + // this applies all chain configs webpackChains.forEach((chainFn) => { return chainFn(config, env);