mirror of
				https://github.com/Redocly/redoc.git
				synced 2025-11-04 01:37:32 +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;
 | 
						|
}
 |