refactor: simplify copy handling

This commit is contained in:
Igor Randjelovic
2021-01-02 16:27:00 +01:00
parent 68f3e728a6
commit c3efab3abc
4 changed files with 33 additions and 20 deletions

View File

@ -39,7 +39,6 @@
"sass-loader": "^10.1.0",
"sax": "^1.2.4",
"source-map": "^0.7.3",
"svelte-native-preprocessor": "^0.2.0",
"terser-webpack-plugin": "^5.0.3",
"ts-dedent": "^2.0.0",
"ts-loader": "^8.0.11",

View File

@ -1,5 +1,6 @@
import { DefinePlugin, HotModuleReplacementPlugin } from 'webpack';
import Config from 'webpack-chain';
import { resolve } from 'path';
import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
@ -10,6 +11,7 @@ import TerserPlugin from 'terser-webpack-plugin';
import { PlatformSuffixPlugin } from '../plugins/PlatformSuffixPlugin';
import { addCopyRule, applyCopyRules } from '../helpers/copyRules';
import { WatchStatePlugin } from '../plugins/WatchStatePlugin';
import { getProjectRootPath } from '../helpers/project';
import { hasDependency } from '../helpers/dependencies';
import { IWebpackEnv } from '../index';
import {
@ -18,8 +20,6 @@ import {
getEntryDirPath,
getEntryPath,
} from '../helpers/platform';
import { getProjectRootPath } from '../helpers/project';
import { resolve } from 'path';
export default function (config: Config, env: IWebpackEnv): Config {
const entryPath = getEntryPath();
@ -269,13 +269,15 @@ export default function (config: Config, env: IWebpackEnv): Config {
config.when(env.report, (config) => {
const projectRoot = getProjectRootPath();
config.plugin('BundleAnalyzerPlugin').use(BundleAnalyzerPlugin, [{
analyzerMode: 'static',
generateStatsFile: true,
openAnalyzer: false,
reportFilename: resolve(projectRoot, 'report', 'report.html'),
statsFilename: resolve(projectRoot, 'report', 'stats.json'),
}]);
config.plugin('BundleAnalyzerPlugin').use(BundleAnalyzerPlugin, [
{
analyzerMode: 'static',
generateStatsFile: true,
openAnalyzer: false,
reportFilename: resolve(projectRoot, 'report', 'report.html'),
statsFilename: resolve(projectRoot, 'report', 'stats.json'),
},
]);
});
return config;

View File

@ -1,9 +1,8 @@
import svelteNativePreprocessor from 'svelte-native-preprocessor';
import Config from 'webpack-chain';
import { getProjectRootPath } from '../helpers/project';
import { env as _env, IWebpackEnv } from '../index';
import { getPlatformName } from '../helpers/platform';
import { env as _env, IWebpackEnv } from '../index';
import { error } from '../helpers/log';
import base from './base';

View File

@ -1,8 +1,10 @@
import CopyWebpackPlugin from 'copy-webpack-plugin';
import { relative, resolve } from 'path';
import { env } from '..';
import { getEntryDirPath } from './platform';
import Config from 'webpack-chain';
import { getProjectRootPath } from './project';
import { getEntryDirPath } from './platform';
import { env } from '..';
/**
* @internal
@ -37,17 +39,28 @@ export function removeCopyRule(glob: string) {
/**
* @internal
*/
export function applyCopyRules(config) {
export function applyCopyRules(config: Config) {
const entryDir = getEntryDirPath();
// todo: handle empty appResourcesPath?
// (the CLI should always pass the path - maybe not required)
const appResourcesFullPath = resolve(
getProjectRootPath(),
env.appResourcesPath
);
const globOptions = {
dot: false,
ignore: [
// ignore everything in App_Resources (regardless where they are located)
`${relative(entryDir, appResourcesFullPath)}/**`,
],
};
const context = getEntryDirPath();
const projectRoot = getProjectRootPath();
const appResourcesFullPath = resolve(projectRoot, env.appResourcesPath);
const globOptions = { dot: false, ignore: [`**/${relative(context, appResourcesFullPath)}/**`] };
config.plugin('CopyWebpackPlugin').use(CopyWebpackPlugin, [
{
patterns: Array.from(copyRules).map((glob) => ({
from: glob,
context,
context: entryDir,
noErrorOnMissing: true,
globOptions,
})),