* Create a webpack config for given target * @param {Target} target * @param {boolean} dev * @param {boolean} minimize * @returns {object}
(target, dev, minimize)
| 64 | * @returns {object} |
| 65 | */ |
| 66 | function createConfig(target, dev, minimize) { |
| 67 | /** @type {Array<any>} */ |
| 68 | const cssLoaders = [{ |
| 69 | loader: 'css-loader', |
| 70 | options: {importLoaders: 1}, |
| 71 | }, { |
| 72 | loader: 'postcss-loader', |
| 73 | options: {postcssOptions: {plugins: [require('postcss-preset-env')()]}}, |
| 74 | }]; |
| 75 | if (minimize) { |
| 76 | cssLoaders[1].options.postcssOptions.plugins.push(require('cssnano')()); |
| 77 | } |
| 78 | |
| 79 | let sassVariables = `$version: "${version}";\n`; |
| 80 | |
| 81 | // use only necessary fonts, overridable by environment variables |
| 82 | let isCovered = false; |
| 83 | for (const font of fonts) { |
| 84 | const override = /** @type {string | undefined} */ |
| 85 | (process.env[`USE_${font.toUpperCase()}`]); |
| 86 | /** @type {boolean} */ |
| 87 | const useFont = override === "true" || override !== "false" && !isCovered; |
| 88 | sassVariables += (`$use-${font}: ${useFont.toString()};\n`); |
| 89 | |
| 90 | const support = caniuse.feature(caniuse.features[font]).stats; |
| 91 | isCovered = isCovered || useFont && browserslist.every(browser => { |
| 92 | const [name, version] = browser.split(' '); |
| 93 | return !support[name] || support[name][version] === 'y'; |
| 94 | }); |
| 95 | } |
| 96 | |
| 97 | return { |
| 98 | mode: dev ? 'development' : 'production', |
| 99 | context: __dirname, |
| 100 | entry: { |
| 101 | [target.name]: target.entry, |
| 102 | }, |
| 103 | output: { |
| 104 | filename: minimize ? '[name].min.js' : '[name].js', |
| 105 | library: target.library, |
| 106 | libraryTarget: 'umd', |
| 107 | libraryExport: 'default', |
| 108 | // Enable output modules to be used in browser or Node. |
| 109 | // See: https://github.com/webpack/webpack/issues/6522 |
| 110 | // https://github.com/webpack/webpack/pull/11987 |
| 111 | globalObject: "(typeof self !== 'undefined' ? self : this)", |
| 112 | path: path.resolve(__dirname, 'dist'), |
| 113 | publicPath: dev ? '/' : '', |
| 114 | }, |
| 115 | module: { |
| 116 | rules: [ |
| 117 | { |
| 118 | test: /\.js$/, |
| 119 | exclude: /node_modules/, |
| 120 | use: 'babel-loader', |
| 121 | }, |
| 122 | { |
| 123 | test: /\.ts?$/, |
no test coverage detected