Files
cypress/packages/runner/webpack.config.ts

100 lines
2.3 KiB
TypeScript

import _ from 'lodash'
import { getCommonConfig, getSimpleConfig, HtmlWebpackPlugin, getCopyWebpackPlugin } from '@packages/web-config/webpack.config.base'
import path from 'path'
import webpack from 'webpack'
import cyIcons from '@cypress/icons'
const commonConfig = getCommonConfig()
const CopyWebpackPlugin = getCopyWebpackPlugin()
// @ts-ignore
const babelLoader = _.find(commonConfig.module.rules, (rule) => {
// @ts-ignore
return _.includes(rule.use.loader, 'babel-loader')
})
// @ts-ignore
babelLoader.use.options.plugins.push([require.resolve('babel-plugin-prismjs'), {
'languages': ['javascript', 'coffeescript', 'typescript', 'jsx', 'tsx'],
'plugins': ['line-numbers', 'line-highlight'],
'theme': 'default',
'css': false,
}])
let pngRule
// @ts-ignore
const nonPngRules = _.filter(commonConfig.module.rules, (rule) => {
// @ts-ignore
if (rule.test.toString().includes('png')) {
pngRule = rule
return false
}
return true
})
pngRule.use[0].options = {
name: '[name].[ext]',
outputPath: 'img',
publicPath: '/__cypress/runner/img/',
}
// @ts-ignore
const mainConfig: webpack.Configuration = {
...commonConfig,
module: {
rules: [
...nonPngRules,
pngRule,
],
},
entry: {
cypress_runner: [path.resolve(__dirname, 'src/index.js')],
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].js',
},
}
// @ts-ignore
mainConfig.plugins = [
// @ts-ignore
...mainConfig.plugins,
new HtmlWebpackPlugin({
template: path.resolve(__dirname, './static/index.html'),
inject: false,
}),
new CopyWebpackPlugin([{
from: cyIcons.getPathToFavicon('favicon.ico'),
}]),
]
mainConfig.resolve = {
...mainConfig.resolve,
alias: {
'bluebird': require.resolve('bluebird'),
'lodash': require.resolve('lodash'),
'mobx': require.resolve('mobx'),
'mobx-react': require.resolve('mobx-react'),
'react': require.resolve('react'),
'react-dom': require.resolve('react-dom'),
},
}
// @ts-ignore
const injectionConfig: webpack.Configuration = {
...getSimpleConfig(),
mode: 'production',
entry: {
injection: [path.resolve(__dirname, 'injection/index.js')],
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].js',
},
}
export default [mainConfig, injectionConfig]