feat: addCopyRule removeCopyRule helpers

This commit is contained in:
Igor Randjelovic
2020-12-01 20:23:56 +01:00
parent 5dad44a8e3
commit fa70654bfc
5 changed files with 60 additions and 24 deletions

View File

@ -8,7 +8,8 @@ module.exports = {
'<rootDir>/scripts/jest.setup.ts'
],
setupFilesAfterEnv: [
'<rootDir>/scripts/jest.mockWarn.ts'
'<rootDir>/scripts/jest.mockWarn.ts',
'<rootDir>/scripts/jest.copyRules.ts'
],
globals: {
__TEST__: true,

View File

@ -0,0 +1,6 @@
import { copyRules } from '../src/helpers/copyRules';
afterEach(() => {
// Clear copy rules
copyRules.clear();
});

View File

@ -1,15 +1,16 @@
import { DefinePlugin, HotModuleReplacementPlugin } from 'webpack';
import Config from 'webpack-chain';
import path from 'path';
import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
import { CleanWebpackPlugin } from 'clean-webpack-plugin';
import CopyWebpackPlugin from 'copy-webpack-plugin';
import TerserPlugin from 'terser-webpack-plugin';
// import { WatchStateLoggerPlugin } from '../plugins/WatchStateLoggerPlugin';
import { PlatformSuffixPlugin } from '../plugins/PlatformSuffixPlugin';
import { addCopyRule, applyCopyRules } from '../helpers/copyRules';
import { WatchStatePlugin } from '../plugins/WatchStatePlugin';
import { hasDependency } from '../helpers/dependencies';
import { IWebpackEnv } from '../index';
import {
getAbsoluteDistPath,
@ -17,14 +18,11 @@ import {
getEntryPath,
getPlatform,
} from '../helpers/project';
import { hasDependency } from '../helpers/dependencies';
import { PlatformSuffixPlugin } from '../plugins/PlatformSuffixPlugin';
export default function (config: Config, env: IWebpackEnv): Config {
const entryPath = getEntryPath();
const platform = getPlatform();
const mode = env.production ? 'production' : 'development';
const appPath = path.dirname(entryPath);
// set mode
config.mode(mode);
@ -232,21 +230,12 @@ export default function (config: Config, env: IWebpackEnv): Config {
},
]);
const copyPaths = ['assets/**', 'fonts/**', '**/*.+(jpg|png)'];
config.plugin('CopyWebpackPlugin').use(CopyWebpackPlugin, [
{
patterns: copyPaths.map((from) => ({
from,
context: appPath,
noErrorOnMissing: true,
globOptions: {
dot: false,
// todo: ignore AppResources if inside app folder!
// ignore: [``]
},
})),
},
]);
// set up default copy rules
addCopyRule('assets/**');
addCopyRule('fonts/**');
addCopyRule('**/*.+(jpg|png)');
applyCopyRules(config);
// add the WatchStateLogger plugin used to notify the CLI of build state
// config.plugin('WatchStateLoggerPlugin').use(WatchStateLoggerPlugin);

View File

@ -0,0 +1,36 @@
import CopyWebpackPlugin from 'copy-webpack-plugin';
import { getEntryDirPath } from './project';
/**
* @internal
*/
export let copyRules = new Set([]);
export function addCopyRule(glob: string) {
copyRules.add(glob);
}
export function removeCopyRule(glob: string) {
copyRules.delete(glob);
}
/**
* @internal
*/
export function applyCopyRules(config) {
config.plugin('CopyWebpackPlugin').use(CopyWebpackPlugin, [
{
patterns: Array.from(copyRules).map((glob) => ({
from: glob,
context: getEntryDirPath(),
noErrorOnMissing: true,
globOptions: {
dot: false,
// todo: ignore AppResources if inside app folder!
// ignore: [``]
},
})),
},
]);
}

View File

@ -1,13 +1,14 @@
import { merge } from 'webpack-merge';
import { addCopyRule, removeCopyRule } from './copyRules';
import { determineProjectFlavor } from './flavor';
import { error, info, warn } from './log';
import { getValue } from './config';
import {
getAllDependencies,
hasDependency,
getDependencyPath,
} from './dependencies';
import { determineProjectFlavor } from './flavor';
import { error, info, warn } from './log';
import { getValue } from './config';
import {
getAbsoluteDistPath,
getDistPath,
@ -22,8 +23,11 @@ import {
// as this generates nicer typings
// that show all the utils inline
// rather than imports to types
// todo: maybe use api-extractor instead
export default {
merge,
addCopyRule,
removeCopyRule,
config: {
getValue,
},