1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | 'use strict';
|
7 |
|
8 | const path = require( 'path' );
|
9 | const webpack = require( 'webpack' );
|
10 | const TerserPlugin = require( 'terser-webpack-plugin' );
|
11 | const bundler = require( '../bundler' );
|
12 | const styles = require( '../styles' );
|
13 | const tools = require( '../tools' );
|
14 | const CKEditorWebpackPlugin = require( '@ckeditor/ckeditor5-dev-webpack-plugin' );
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | module.exports = function getDllPluginWebpackConfig( options ) {
|
28 | const packageName = tools.readPackageName( options.packagePath );
|
29 |
|
30 | const webpackConfig = {
|
31 | mode: options.isDevelopmentMode ? 'development' : 'production',
|
32 |
|
33 | performance: { hints: false },
|
34 |
|
35 | entry: path.join( options.packagePath, 'src', 'index.js' ),
|
36 |
|
37 | output: {
|
38 | library: [ 'CKEditor5', getGlobalKeyForPackage( packageName ) ],
|
39 |
|
40 | path: path.join( options.packagePath, 'build' ),
|
41 | filename: getIndexFileName( packageName ),
|
42 | libraryTarget: 'window'
|
43 | },
|
44 |
|
45 | optimization: {
|
46 | minimize: false
|
47 | },
|
48 |
|
49 | plugins: [
|
50 | new CKEditorWebpackPlugin( {
|
51 |
|
52 | language: 'en',
|
53 | additionalLanguages: 'all',
|
54 | sourceFilesPattern: /^src[/\\].+\.js$/,
|
55 | skipPluralFormFunction: true
|
56 | } ),
|
57 | new webpack.BannerPlugin( {
|
58 | banner: bundler.getLicenseBanner(),
|
59 | raw: true
|
60 | } ),
|
61 | new webpack.DllReferencePlugin( {
|
62 | manifest: require( options.manifestPath ),
|
63 | scope: 'ckeditor5/src',
|
64 | name: 'CKEditor5.dll'
|
65 | } )
|
66 | ],
|
67 |
|
68 | resolve: {
|
69 | extensions: [ '.ts', '.js', '.json' ]
|
70 | },
|
71 |
|
72 | module: {
|
73 | rules: [
|
74 | {
|
75 | test: /\.svg$/,
|
76 | use: [ 'raw-loader' ]
|
77 | },
|
78 | {
|
79 | test: /\.css$/,
|
80 | use: [
|
81 | {
|
82 | loader: 'style-loader',
|
83 | options: {
|
84 | injectType: 'singletonStyleTag',
|
85 | attributes: {
|
86 | 'data-cke': true
|
87 | }
|
88 | }
|
89 | },
|
90 | 'css-loader',
|
91 | {
|
92 | loader: 'postcss-loader',
|
93 | options: {
|
94 | postcssOptions: styles.getPostCssConfig( {
|
95 | themeImporter: {
|
96 | themePath: options.themePath
|
97 | },
|
98 | minify: true
|
99 | } )
|
100 | }
|
101 | }
|
102 | ]
|
103 | },
|
104 | {
|
105 | test: /\.ts$/,
|
106 | use: [ 'ts-loader' ]
|
107 | }
|
108 | ]
|
109 | }
|
110 | };
|
111 |
|
112 | if ( options.isDevelopmentMode ) {
|
113 | webpackConfig.devtool = 'source-map';
|
114 | } else {
|
115 | webpackConfig.optimization.minimize = true;
|
116 |
|
117 | webpackConfig.optimization.minimizer = [
|
118 | new TerserPlugin( {
|
119 | terserOptions: {
|
120 | output: {
|
121 |
|
122 | comments: /^!/
|
123 | }
|
124 | },
|
125 | extractComments: false
|
126 | } )
|
127 | ];
|
128 | }
|
129 |
|
130 | return webpackConfig;
|
131 | };
|
132 |
|
133 |
|
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 |
|
140 | function getGlobalKeyForPackage( packageName ) {
|
141 | return packageName
|
142 | .replace( /^@ckeditor\/ckeditor5?-/, '' )
|
143 | .replace( /-([a-z])/g, ( match, p1 ) => p1.toUpperCase() );
|
144 | }
|
145 |
|
146 |
|
147 |
|
148 |
|
149 |
|
150 |
|
151 |
|
152 | function getIndexFileName( packageName ) {
|
153 | return packageName.replace( /^@ckeditor\/ckeditor5?-/, '' ) + '.js';
|
154 | }
|