123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- const path = require('path');
- const _ = require('lodash');
- const chalk = require('chalk').default;
- const utils = require('./utils');
- const fs = require('fs');
- let AnalyzePlugin = null
- if(process.env.__ENABLE_ANALYZE__ === 'true') {
- AnalyzePlugin = require("@ies/semi-page-analyze-inject/src/AnalyzePlugin")
- }
- function resolve(...dirs) {
- return path.join(__dirname, '../..', ...dirs);
- }
- /**
- * 当我们想获取 Cypress 代码覆盖率时,需要将 TEST_ENV 设置为 true。
- *
- * 这时会打开 babel-loader 配置,去掉 esbuild 配置,并在 babel plugin 中注入 babel-plugin-istanbul
- *
- * @see https://github.com/istanbuljs/babel-plugin-istanbul
- */
- function getAddons() {
- let addons = [
- // for performance reason, only open `@storybook/addon-a11y` when dev a11y
- // '@storybook/addon-a11y',
- '@storybook/addon-toolbars',
- ];
- if (!utils.isTest()) {
- console.log(chalk.yellow(`if you want to get cypress code coverage, set TEST_ENV=test, now it is '${process.env.TEST_ENV}'`));
- }
- return addons;
- }
- module.exports = {
- framework: {
- name: "@storybook/react-webpack5",
- options: {
- fastRefresh: true
- },
- },
- addons: getAddons(),
- webpackFinal: async (config) => {
- const rules =
- (config.module.rules &&
- config.module.rules.filter(rule => {
- const test = _.toString(rule && rule.test);
- if (/\.css/i.test(test) || /\.s(c|a)ss/i.test(test)) {
- return false;
- }
- return true;
- })) ||
- [];
- rules.push(
- {
- test: /\.css$/,
- use: ['style-loader', 'css-loader']
- },
- );
- rules.push(
- {
- test: /\.s(a|c)ss$/,
- include: [resolve('packages/semi-ui'), resolve('packages/semi-foundation'), resolve('packages/semi-icons')],
- use: ['style-loader', 'css-loader', 'sass-loader', resolve('packages/semi-webpack/lib/semi-theme-loader.js')],
- }
- );
- AnalyzePlugin && rules.push({
- test: /\.tsx?$/,
- include: [resolve('packages/semi-ui'), resolve('packages/semi-foundation')],
- exclude:/node_modules/,
- use: [
- {
- loader: "babel-loader",
- options: {
- plugins: [AnalyzePlugin],
- }
- },
- ]
- })
- rules.push({
- test: /jsonWorkerManager\.ts$/,
- use: [
- {
- loader: 'webpack-replace-loader',
- options: {
- search: '%WORKER_RAW%',
- replace: () => {
- const workFilePath = resolve('packages/semi-json-viewer-core/workerLib/worker.js');
- const result = fs.readFileSync(workFilePath, 'utf-8');
- const encodedResult = encodeURIComponent(result);
- return encodedResult;
- }
- }
- }
- ]
- });
- config.module.rules = rules;
- config.resolve.extensions.push('.js', '.jsx', '.ts', '.tsx');
- config.resolve.symlinks = false;
- config.mode = "development";
- config.resolve.alias = {
- '@douyinfe/semi-foundation': resolve('packages/semi-foundation'),
- '@douyinfe/semi-icons': resolve('packages/semi-icons/src'),
- '@douyinfe/semi-icons-lab': resolve('packages/semi-icons-lab/src'),
- '@douyinfe/semi-ui': resolve('packages/semi-ui'),
- '@douyinfe/semi-theme-default': resolve('packages/semi-theme-default'),
- '@douyinfe/semi-illustrations': resolve('packages/semi-illustrations/src'),
- '@douyinfe/semi-animation': resolve('packages/semi-animation'),
- '@douyinfe/semi-animation-react': resolve('packages/semi-animation-react'),
- '@douyinfe/semi-animation-styled': resolve('packages/semi-animation-styled'),
- '@douyinfe/semi-json-viewer-core': resolve('packages/semi-json-viewer-core/src'),
- };
- config.devtool = 'source-map';
- // config.output.publicPath = "/storybook/"
- return config;
- }
- };
|