mirror of
https://github.com/storybookjs/storybook.git
synced 2025-03-31 05:03:21 +08:00
117 lines
3.6 KiB
JavaScript
117 lines
3.6 KiB
JavaScript
import path from 'path';
|
|
import webpack from 'webpack';
|
|
import Dotenv from 'dotenv-webpack';
|
|
import InterpolateHtmlPlugin from '@storybook/react-dev-utils/InterpolateHtmlPlugin';
|
|
import WatchMissingNodeModulesPlugin from '@storybook/react-dev-utils/WatchMissingNodeModulesPlugin';
|
|
import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
|
|
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
|
import { managerPath } from '@storybook/core/server';
|
|
|
|
import { includePaths, excludePaths, nodeModulesPaths, loadEnv, nodePaths } from './utils';
|
|
import babelLoaderConfig from './babel';
|
|
import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
|
|
import { version } from '../../../package.json';
|
|
|
|
export default function(configDir) {
|
|
const config = {
|
|
mode: 'development',
|
|
devtool: 'cheap-module-source-map',
|
|
entry: {
|
|
manager: [require.resolve('./polyfills'), managerPath],
|
|
preview: [
|
|
require.resolve('./polyfills'),
|
|
require.resolve('./globals'),
|
|
`${require.resolve('webpack-hot-middleware/client')}?reload=true`,
|
|
],
|
|
},
|
|
output: {
|
|
path: path.join(__dirname, 'dist'),
|
|
filename: 'static/[name].bundle.js',
|
|
publicPath: '/',
|
|
},
|
|
plugins: [
|
|
new HtmlWebpackPlugin({
|
|
filename: 'index.html',
|
|
chunks: ['manager'],
|
|
data: {
|
|
managerHead: getManagerHeadHtml(configDir),
|
|
version,
|
|
},
|
|
template: require.resolve('../index.html.ejs'),
|
|
}),
|
|
new HtmlWebpackPlugin({
|
|
filename: 'iframe.html',
|
|
excludeChunks: ['manager'],
|
|
data: {
|
|
previewHead: getPreviewHeadHtml(configDir),
|
|
},
|
|
template: require.resolve('../iframe.html.ejs'),
|
|
}),
|
|
new InterpolateHtmlPlugin(process.env),
|
|
new webpack.DefinePlugin(loadEnv()),
|
|
new webpack.HotModuleReplacementPlugin(),
|
|
new CaseSensitivePathsPlugin(),
|
|
new WatchMissingNodeModulesPlugin(nodeModulesPaths),
|
|
new webpack.ProgressPlugin(),
|
|
new webpack.ContextReplacementPlugin(
|
|
/angular(\\|\/)core(\\|\/)(@angular|esm5)/,
|
|
path.resolve(__dirname, '../src')
|
|
),
|
|
new Dotenv({ silent: true }),
|
|
],
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.jsx?$/,
|
|
loader: require.resolve('babel-loader'),
|
|
query: babelLoaderConfig,
|
|
include: includePaths,
|
|
exclude: excludePaths,
|
|
},
|
|
{
|
|
test: /\.ts?$/,
|
|
loaders: [
|
|
{
|
|
loader: require.resolve('ts-loader'),
|
|
},
|
|
require.resolve('angular2-template-loader'),
|
|
],
|
|
},
|
|
{
|
|
test: /\.html$/,
|
|
loader: 'raw-loader',
|
|
exclude: /\.async\.html$/,
|
|
},
|
|
{
|
|
test: /\.scss$/,
|
|
loaders: [require.resolve('raw-loader'), require.resolve('sass-loader')],
|
|
},
|
|
{
|
|
test: /\.md$/,
|
|
use: [
|
|
{
|
|
loader: require.resolve('html-loader'),
|
|
},
|
|
{
|
|
loader: require.resolve('markdown-loader'),
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
resolve: {
|
|
// Since we ship with json-loader always, it's better to move extensions to here
|
|
// from the default config.
|
|
extensions: ['.js', '.ts', '.jsx', '.tsx', 'json'],
|
|
// Add support to NODE_PATH. With this we could avoid relative path imports.
|
|
// Based on this CRA feature: https://github.com/facebookincubator/create-react-app/issues/253
|
|
modules: ['node_modules'].concat(nodePaths),
|
|
},
|
|
performance: {
|
|
hints: false,
|
|
},
|
|
};
|
|
|
|
return config;
|
|
}
|