UNPKG

5.4 kBJavaScriptView Raw
1import DuplicateCheckerPlugin from "duplicate-package-checker-webpack-plugin";
2import FriendlyErrorsPlugin from "friendly-errors-webpack-plugin";
3import LodashPlugin from "lodash-webpack-plugin";
4import MomentLocalesPlugin from "moment-locales-webpack-plugin";
5import MomentTimezoneDataPlugin from "moment-timezone-data-webpack-plugin";
6import { join } from "path";
7import SpeedMeasurePlugin from "speed-measure-webpack-plugin";
8import webpack from "webpack";
9import { progressPlugin } from "./progressPlugin";
10import { SizePlugin } from "./sizePlugin";
11export function createPlugins(configuration, dev, modulePaths) {
12 const importOptimizations = [
13 configuration.bundleOptions.includeBusboyEncodings !== true
14 ? new webpack.NormalModuleReplacementPlugin(/encoding-indexes/, (resource) => {
15 if (/busboy/.test(resource.context)) {
16 resource.request = require.resolve("./replacements/busboy/encoding-indexes", {
17 paths: [__dirname]
18 });
19 }
20 })
21 : null,
22 new webpack.NormalModuleReplacementPlugin(/iconv-lite[\/\\]encodings[\/\\]/, (resource) => {
23 if (/iconv-lite/.test(resource.context)) {
24 if (/iconv-lite[\/\\]encodings[\/\\]index/.test(resource.request)) {
25 resource.request = require.resolve("./replacements/iconv-lite/encodings", {
26 paths: [__dirname]
27 });
28 }
29 else if (/iconv-lite[\/\\]encodings[\/\\]/.test(resource.request)) {
30 const [, request] = /iconv-lite[\/\\]encodings[\/\\](.*)/.exec(resource.request);
31 if (!(/internal\.js/.test(request) ||
32 (configuration.bundleOptions.allowedIconvLiteEncodings != null
33 ? configuration.bundleOptions.allowedIconvLiteEncodings.some(re => new RegExp(re).test(request))
34 : false))) {
35 resource.request = require.resolve("./replacements/iconv-lite/noop", {
36 paths: [__dirname]
37 });
38 }
39 }
40 }
41 }),
42 new LodashPlugin(),
43 new MomentLocalesPlugin({
44 localesToKeep: configuration.bundleOptions.momentLocales || []
45 }),
46 configuration.bundleOptions.momentTimezones != null
47 ? new MomentTimezoneDataPlugin({
48 startYear: configuration.bundleOptions.momentTimezones.startYear,
49 endYear: configuration.bundleOptions.momentTimezones.endYear,
50 matchZones: configuration.bundleOptions.momentTimezones.matchZones
51 })
52 : null,
53 process.env.WEBPACK_ANALYZE === "true"
54 ? new DuplicateCheckerPlugin({
55 verbose: true,
56 showHelp: true,
57 strict: true
58 })
59 : null
60 ];
61 const profiling = [
62 process.env.WEBPACK_PROFILE === "true"
63 ? new SpeedMeasurePlugin({
64 outputFormat: "humanVerbose"
65 })
66 : null,
67 process.env.WEBPACK_PROFILE === "true"
68 ? new webpack.debug.ProfilingPlugin({
69 outputPath: join(configuration.outputDir, "./profile.json")
70 })
71 : null,
72 process.env.WEBPACK_BUNDLE_ANALYZE === "true" ? new SizePlugin() : null,
73 progressPlugin()
74 ];
75 const loadVersion = (versionDir) => {
76 if (versionDir != null) {
77 try {
78 return require(join(versionDir, "./package.json")).version;
79 }
80 catch (err) {
81 return false;
82 }
83 }
84 return false;
85 };
86 const versions = {
87 "@excitare/cli": loadVersion(modulePaths.cliPath),
88 "@excitare/entry-next": loadVersion(modulePaths.entryNextDir),
89 "@excitare/entry-service": loadVersion(modulePaths.entryServiceDir),
90 "@excitare/client-next": loadVersion(modulePaths.clientDir),
91 "@excitare/routes": loadVersion(modulePaths.routesDir),
92 "next-server": loadVersion(modulePaths.nextServerPath),
93 next: loadVersion(modulePaths.nextPath),
94 react: loadVersion(modulePaths.reactDir),
95 "react-dom": loadVersion(modulePaths.reactDomDir)
96 };
97 return [
98 ...importOptimizations,
99 ...(!dev ? profiling : []),
100 new FriendlyErrorsPlugin({
101 compilationSuccessInfo: {
102 // messages: ["You application is running here http://localhost:3000"],
103 // notes: ["Some additional notes to be displayed upon successful compilation"]
104 },
105 clearConsole: false,
106 additionalFormatters: [],
107 additionalTransformers: []
108 }),
109 new webpack.DefinePlugin({
110 "process.env.NODE_ENV": JSON.stringify(dev ? "development" : "production"),
111 "process.env.excitareVersions": JSON.stringify(JSON.stringify(versions)),
112 "process.iconOptions": configuration.iconOptions
113 ? JSON.stringify(configuration.iconOptions)
114 : JSON.stringify("null")
115 })
116 ];
117}
118//# sourceMappingURL=plugins.js.map
\No newline at end of file