|
1 | 1 | import * as webpack from 'webpack'; |
2 | 2 | import * as path from 'path'; |
3 | | -import { GlobCopyWebpackPlugin } from '../../plugins/glob-copy-webpack-plugin'; |
| 3 | +import * as CopyWebpackPlugin from 'copy-webpack-plugin'; |
4 | 4 | import { NamedLazyChunksWebpackPlugin } from '../../plugins/named-lazy-chunks-webpack-plugin'; |
5 | 5 | import { InsertConcatAssetsWebpackPlugin } from '../../plugins/insert-concat-assets-webpack-plugin'; |
6 | | -import { extraEntryParser, getOutputHashFormat } from './utils'; |
| 6 | +import { extraEntryParser, getOutputHashFormat, AssetPattern } from './utils'; |
| 7 | +import { isDirectory } from '../../utilities/is-directory'; |
7 | 8 | import { WebpackConfigOptions } from '../webpack-config'; |
8 | 9 |
|
9 | 10 | const ConcatPlugin = require('webpack-concat-plugin'); |
@@ -84,10 +85,44 @@ export function getCommonConfig(wco: WebpackConfigOptions) { |
84 | 85 |
|
85 | 86 | // process asset entries |
86 | 87 | if (appConfig.assets) { |
87 | | - extraPlugins.push(new GlobCopyWebpackPlugin({ |
88 | | - patterns: appConfig.assets, |
89 | | - globOptions: { cwd: appRoot, dot: true, ignore: '**/.gitkeep' } |
90 | | - })); |
| 88 | + const copyWebpackPluginPatterns = appConfig.assets.map((asset: string | AssetPattern) => { |
| 89 | + // Convert all string assets to object notation. |
| 90 | + asset = typeof asset === 'string' ? { glob: asset } : asset; |
| 91 | + // Add defaults. |
| 92 | + // Input is always resolved relative to the appRoot. |
| 93 | + asset.input = path.resolve(appRoot, asset.input || ''); |
| 94 | + asset.output = asset.output || ''; |
| 95 | + asset.glob = asset.glob || ''; |
| 96 | + |
| 97 | + // Ensure trailing slash. |
| 98 | + if (isDirectory(path.resolve(asset.input))) { |
| 99 | + asset.input += '/'; |
| 100 | + } |
| 101 | + |
| 102 | + // Convert dir patterns to globs. |
| 103 | + if (isDirectory(path.resolve(asset.input, asset.glob))) { |
| 104 | + asset.glob = asset.glob + '/**/*'; |
| 105 | + } |
| 106 | + |
| 107 | + return { |
| 108 | + context: asset.input, |
| 109 | + to: asset.output, |
| 110 | + from: { |
| 111 | + glob: asset.glob, |
| 112 | + dot: true |
| 113 | + } |
| 114 | + }; |
| 115 | + }); |
| 116 | + const copyWebpackPluginOptions = { ignore: ['.gitkeep'] }; |
| 117 | + |
| 118 | + const copyWebpackPluginInstance = new CopyWebpackPlugin(copyWebpackPluginPatterns, |
| 119 | + copyWebpackPluginOptions); |
| 120 | + |
| 121 | + // Save options so we can use them in eject. |
| 122 | + (copyWebpackPluginInstance as any)['copyWebpackPluginPatterns'] = copyWebpackPluginPatterns; |
| 123 | + (copyWebpackPluginInstance as any)['copyWebpackPluginOptions'] = copyWebpackPluginOptions; |
| 124 | + |
| 125 | + extraPlugins.push(copyWebpackPluginInstance); |
91 | 126 | } |
92 | 127 |
|
93 | 128 | if (buildOptions.progress) { |
|
0 commit comments