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", "sass-loader": "^10.1.0",
"sax": "^1.2.4", "sax": "^1.2.4",
"source-map": "^0.7.3", "source-map": "^0.7.3",
"svelte-native-preprocessor": "^0.2.0",
"terser-webpack-plugin": "^5.0.3", "terser-webpack-plugin": "^5.0.3",
"ts-dedent": "^2.0.0", "ts-dedent": "^2.0.0",
"ts-loader": "^8.0.11", "ts-loader": "^8.0.11",

View File

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

View File

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

View File

@ -1,8 +1,10 @@
import CopyWebpackPlugin from 'copy-webpack-plugin'; import CopyWebpackPlugin from 'copy-webpack-plugin';
import { relative, resolve } from 'path'; import { relative, resolve } from 'path';
import { env } from '..'; import Config from 'webpack-chain';
import { getEntryDirPath } from './platform';
import { getProjectRootPath } from './project'; import { getProjectRootPath } from './project';
import { getEntryDirPath } from './platform';
import { env } from '..';
/** /**
* @internal * @internal
@ -37,17 +39,28 @@ export function removeCopyRule(glob: string) {
/** /**
* @internal * @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, [ config.plugin('CopyWebpackPlugin').use(CopyWebpackPlugin, [
{ {
patterns: Array.from(copyRules).map((glob) => ({ patterns: Array.from(copyRules).map((glob) => ({
from: glob, from: glob,
context, context: entryDir,
noErrorOnMissing: true, noErrorOnMissing: true,
globOptions, globOptions,
})), })),