mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
feat(wepback): custom buildPath
support (#10477)
Co-authored-by: farfromrefuge <dev@akylas.fr>
This commit is contained in:
@ -13,6 +13,7 @@ import {
|
||||
getPlatformName,
|
||||
} from '../helpers/platform';
|
||||
import base from './base';
|
||||
|
||||
// until we can switch to async/await on the webpack config, copy this from '@angular/compiler-cli'
|
||||
const GLOBAL_DEFS_FOR_TERSER = {
|
||||
ngDevMode: false,
|
||||
|
@ -11,11 +11,11 @@ import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
|
||||
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
|
||||
import TerserPlugin from 'terser-webpack-plugin';
|
||||
|
||||
import { getProjectFilePath, getProjectTSConfigPath } from '../helpers/project';
|
||||
import { PlatformSuffixPlugin } from '../plugins/PlatformSuffixPlugin';
|
||||
import { applyFileReplacements } from '../helpers/fileReplacements';
|
||||
import { addCopyRule, applyCopyRules } from '../helpers/copyRules';
|
||||
import { WatchStatePlugin } from '../plugins/WatchStatePlugin';
|
||||
import { getProjectFilePath, getProjectTSConfigPath } from '../helpers/project';
|
||||
import { hasDependency } from '../helpers/dependencies';
|
||||
import { applyDotEnvPlugin } from '../helpers/dotEnv';
|
||||
import { env as _env, IWebpackEnv } from '../index';
|
||||
@ -84,7 +84,9 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
|
||||
// when using hidden-source-map, output source maps to the `platforms/{platformName}-sourceMaps` folder
|
||||
if (env.sourceMap === 'hidden-source-map') {
|
||||
const sourceMapAbsolutePath = getProjectFilePath(
|
||||
`./platforms/${platform}-sourceMaps/[file].map[query]`
|
||||
`./${
|
||||
env.buildPath ?? 'platforms'
|
||||
}/${platform}-sourceMaps/[file].map[query]`
|
||||
);
|
||||
const sourceMapRelativePath = relative(outputPath, sourceMapAbsolutePath);
|
||||
config.output.sourceMapFilename(sourceMapRelativePath);
|
||||
@ -131,7 +133,7 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
|
||||
|
||||
config.watchOptions({
|
||||
ignored: [
|
||||
`${getProjectFilePath('platforms')}/**`,
|
||||
`${getProjectFilePath(env.buildPath ?? 'platforms')}/**`,
|
||||
`${getProjectFilePath(env.appResourcesPath ?? 'App_Resources')}/**`,
|
||||
],
|
||||
});
|
||||
|
@ -1,9 +1,7 @@
|
||||
import CopyWebpackPlugin from 'copy-webpack-plugin';
|
||||
import { basename, relative, resolve } from 'path';
|
||||
import Config from 'webpack-chain';
|
||||
import { sync as globbySync } from 'globby';
|
||||
import { basename } from 'path';
|
||||
|
||||
import { getProjectRootPath } from './project';
|
||||
import { getEntryDirPath } from './platform';
|
||||
import { env } from '..';
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { resolve } from 'path';
|
||||
|
||||
import { env as _env, IWebpackEnv } from '../index';
|
||||
import { addCopyRule } from './copyRules';
|
||||
import { getProjectRootPath } from './project';
|
||||
import { addCopyRule } from './copyRules';
|
||||
|
||||
interface IReplacementMap {
|
||||
[_replace: string]: /* _with */ string;
|
||||
|
@ -10,6 +10,7 @@ import { applyFileReplacements } from './fileReplacements';
|
||||
import { addCopyRule, removeCopyRule } from './copyRules';
|
||||
import { error, info, warn, warnOnce } from './log';
|
||||
import { determineProjectFlavor } from './flavor';
|
||||
import { readTsConfig } from './typescript';
|
||||
import { getValue } from './config';
|
||||
import { getIPS } from './host';
|
||||
import {
|
||||
@ -26,7 +27,6 @@ import {
|
||||
getPlatform,
|
||||
getPlatformName,
|
||||
} from './platform';
|
||||
import { readTsConfig } from './typescript';
|
||||
|
||||
// intentionally populated manually
|
||||
// as this generates nicer typings
|
||||
|
@ -1,5 +1,5 @@
|
||||
import dedent from 'ts-dedent';
|
||||
import { env } from '@nativescript/webpack';
|
||||
import dedent from 'ts-dedent';
|
||||
|
||||
// de-indents strings so multi-line string literals can be used
|
||||
function cleanup(data: any[]) {
|
||||
|
@ -138,7 +138,7 @@ export function getDistPath() {
|
||||
}
|
||||
|
||||
// fallback to a generic platforms/<platform>/dist folder
|
||||
return `platforms/${getPlatformName()}/dist`;
|
||||
return `${env.buildPath ?? 'platforms'}/${getPlatformName()}/dist`;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { ContextExclusionPlugin } from 'webpack';
|
||||
import Config from 'webpack-chain';
|
||||
import { dirname, join } from 'path';
|
||||
import { writeFileSync, mkdirSync } from 'fs';
|
||||
|
||||
import VirtualModulesPlugin from 'webpack-virtual-modules';
|
||||
import { getEntryDirPath } from './platform';
|
||||
import { ContextExclusionPlugin } from 'webpack';
|
||||
import { mkdirSync, writeFileSync } from 'fs';
|
||||
import { dirname, join } from 'path';
|
||||
import Config from 'webpack-chain';
|
||||
import dedent from 'ts-dedent';
|
||||
|
||||
import { getEntryDirPath } from './platform';
|
||||
import { getProjectFilePath } from './project';
|
||||
|
||||
/**
|
||||
|
@ -26,6 +26,7 @@ export interface IWebpackEnv {
|
||||
|
||||
appPath?: string;
|
||||
appResourcesPath?: string;
|
||||
buildPath?: string;
|
||||
appComponents?: string[];
|
||||
|
||||
nativescriptLibPath?: string | boolean;
|
||||
@ -65,6 +66,7 @@ let webpackMerges: any[] = [];
|
||||
let explicitUseConfig = false;
|
||||
let hasInitialized = false;
|
||||
let currentPlugin: string | undefined;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
@ -85,6 +87,7 @@ export function clearCurrentPlugin() {
|
||||
}
|
||||
|
||||
////// PUBLIC API
|
||||
|
||||
/**
|
||||
* The default flavor specific configs
|
||||
*/
|
||||
|
@ -1,7 +1,8 @@
|
||||
import { INativeScriptPlatform } from "../helpers/platform";
|
||||
import { env } from '../';
|
||||
|
||||
function getDistPath() {
|
||||
return `platforms/android/app/src/main/assets/app`;
|
||||
return `${env.buildPath ?? "platforms"}/android/app/src/main/assets/app`;
|
||||
}
|
||||
|
||||
const AndroidPlatform: INativeScriptPlatform = {
|
||||
|
@ -2,6 +2,7 @@ import { basename } from "path";
|
||||
|
||||
import { INativeScriptPlatform } from "../helpers/platform";
|
||||
import { getProjectRootPath } from "../helpers/project";
|
||||
import { env } from '../';
|
||||
|
||||
function sanitizeName(appName: string): string {
|
||||
return appName.split("").filter((c) =>
|
||||
@ -10,7 +11,7 @@ function sanitizeName(appName: string): string {
|
||||
}
|
||||
function getDistPath() {
|
||||
const appName = sanitizeName(basename(getProjectRootPath()));
|
||||
return `platforms/ios/${appName}/app`;
|
||||
return `${env.buildPath ?? "platforms"}/ios/${appName}/app`;
|
||||
}
|
||||
|
||||
const iOSPlatform: INativeScriptPlatform = {
|
||||
|
@ -2,6 +2,7 @@ import { basename } from "path";
|
||||
|
||||
import { INativeScriptPlatform } from "../helpers/platform";
|
||||
import { getProjectRootPath } from "../helpers/project";
|
||||
import { env } from '../';
|
||||
|
||||
function sanitizeName(appName: string): string {
|
||||
return appName.split("").filter((c) =>
|
||||
@ -10,7 +11,7 @@ function sanitizeName(appName: string): string {
|
||||
}
|
||||
function getDistPath() {
|
||||
const appName = sanitizeName(basename(getProjectRootPath()));
|
||||
return `platforms/visionos/${appName}/app`;
|
||||
return `${env.buildPath ?? "platforms"}/visionos/${appName}/app`;
|
||||
}
|
||||
|
||||
const visionOSPlatform: INativeScriptPlatform = {
|
||||
|
Reference in New Issue
Block a user