mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-26 02:23:43 +03:00
140 lines
3.6 KiB
JavaScript
140 lines
3.6 KiB
JavaScript
const webpack = require('webpack');
|
|
|
|
const CheckerPlugin = require('awesome-typescript-loader').CheckerPlugin;
|
|
const StringReplacePlugin = require("string-replace-webpack-plugin");
|
|
const CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin');
|
|
const ngcWebpack = require('ngc-webpack');
|
|
|
|
const VERSION = JSON.stringify(require('../package.json').version);
|
|
|
|
const root = require('./helpers').root;
|
|
|
|
module.exports = function (options) {
|
|
const conf = {
|
|
performance: { hints: false },
|
|
|
|
output: {
|
|
path: root('dist'),
|
|
filename: '[name].js',
|
|
sourceMapFilename: '[name].[id].map',
|
|
chunkFilename: '[id].chunk.js'
|
|
},
|
|
|
|
resolve: {
|
|
extensions: ['.ts', '.js', '.json', '.css'],
|
|
alias: {
|
|
http: 'stream-http',
|
|
https: 'stream-http'
|
|
}
|
|
},
|
|
|
|
externals: {
|
|
'jquery': 'jquery',
|
|
'esprima': 'esprima' // optional dep of ys-yaml not needed for redoc
|
|
},
|
|
|
|
module: {
|
|
exprContextCritical: false,
|
|
rules: [
|
|
{
|
|
enforce: 'pre',
|
|
test: /\.ts$/,
|
|
exclude: [
|
|
/node_modules/
|
|
],
|
|
loader: StringReplacePlugin.replace({
|
|
replacements: [
|
|
{
|
|
pattern: /styleUrls:\s*\[\s*'([\w\.\/-]*)\.css'\s*\][\s,]*$/gm,
|
|
replacement: function (match, p1, offset, string) {
|
|
return `styleUrls: ['${p1}.scss'],`;
|
|
}
|
|
},
|
|
{
|
|
pattern: /(\.\/components\/Redoc\/redoc-initial-styles\.css)/gm,
|
|
replacement: function (match, p1, offset, string) {
|
|
return p1.replace('.css', '.scss');
|
|
}
|
|
}
|
|
]
|
|
})
|
|
},
|
|
{
|
|
enforce: 'pre',
|
|
test: /\.js$/,
|
|
loader: 'source-map-loader',
|
|
exclude: [
|
|
/node_modules/
|
|
]
|
|
},
|
|
{
|
|
test: /\.json$/,
|
|
use: 'json-loader'
|
|
},
|
|
{
|
|
test: /lib[\\\/].*\.css$/,
|
|
loaders: ['raw-loader'],
|
|
exclude: [/redoc-initial-styles\.css$/]
|
|
}, {
|
|
test: /\.css$/,
|
|
loaders: ['style-loader', 'css-loader?-import'],
|
|
exclude: [/lib[\\\/](?!.*redoc-initial-styles).*\.css$/]
|
|
},
|
|
{
|
|
test: /lib[\\\/].*\.scss$/,
|
|
loaders: ['raw-loader', 'sass-loader'],
|
|
exclude: [/redoc-initial-styles\.scss$/]
|
|
},
|
|
{
|
|
test: /\.scss$/,
|
|
use: [
|
|
'style-loader',
|
|
'css-loader?-import',
|
|
'sass-loader'
|
|
],
|
|
exclude: [/lib[\\\/](?!.*redoc-initial-styles).*\.scss$/]
|
|
},
|
|
{
|
|
test: /\.html$/,
|
|
loader: 'raw-loader'
|
|
}
|
|
],
|
|
|
|
},
|
|
|
|
plugins: [
|
|
new CheckerPlugin(),
|
|
new webpack.DefinePlugin({
|
|
'IS_PRODUCTION': options.IS_PRODUCTION,
|
|
'LIB_VERSION': VERSION,
|
|
'AOT': options.AOT
|
|
}),
|
|
|
|
new StringReplacePlugin(),
|
|
new webpack.NormalModuleReplacementPlugin(/node_modules\/rxjs\/operator\/.*/, root('build/empty.js')),
|
|
new webpack.NormalModuleReplacementPlugin(/node_modules\/rxjs\/testing\//, root('build/empty.js'))
|
|
],
|
|
node: {
|
|
global: true,
|
|
crypto: 'empty',
|
|
fs: 'empty',
|
|
process: true,
|
|
module: false,
|
|
clearImmediate: false,
|
|
setImmediate: false
|
|
}
|
|
};
|
|
|
|
if (options.AOT) {
|
|
conf.plugins.push(
|
|
new ngcWebpack.NgcWebpackPlugin({
|
|
disable: !options.AOT,
|
|
tsConfig: root('tsconfig.webpack.json'),
|
|
resourceOverride: root('build/resource-override.js')
|
|
})
|
|
);
|
|
}
|
|
|
|
return conf;
|
|
}
|