export default()

in packages/preset-wind-component/src/index.ts [9:212]


export default (config: IOption, cmdArgs: any) => {
  const moduleName = config.moduleName;
  if (!moduleName) {
    error(
      'UMD version should set moduleName in @alicloud/console-toolkit-preset-wind-component configuration'
    );
    exit(1);
  }

  const babelOptions = getBabelOptions(config, {
    module: cmdArgs.esModule ? false : 'commonjs',
    esModules: cmdArgs.esModule === true,
  });
  const babelOptionsForJest = getBabelOptions(
    { babelModuleResolve: undefined, ...config },
    {
      module: cmdArgs.esModule ? false : 'commonjs',
      esModules: cmdArgs.esModule === true,
    }
  );

  const rollupConfig = getRollupConfig({ ...config });
  const outDirDirs = getOutputDir(config);
  const babelOutputDir = cmdArgs.esModule ? outDirDirs.es : outDirDirs.cjs;

  const plugins: any[] = [
    [
      require.resolve('@alicloud/console-toolkit-plugin-builtin'),
      {
        engine: 'babel',
      },
    ],

    [
      require.resolve('@alicloud/console-toolkit-plugin-babel'),
      {
        babelOptions,
        cliOptions: {
          outDir: babelOutputDir,
          filter: config.bableFilter,
          extensions: resolveExts(config.useTypescript || !!config.typescript),
        },
      },
    ],

    [
      require.resolve('@alicloud/console-toolkit-plugin-rollup'),
      {
        config: {
          ...rollupConfig,
        }
      },
    ],

    [
      require.resolve('@alicloud/console-toolkit-plugin-react'),
      {
        ...config,
        windRc: false,
        windIntl: false,
        disableHtml: true,
        disablePolyfill: true,
        disableReactHotLoader: true,
        entry: config.entry,
      },
    ],

    [
      require.resolve('@alicloud/console-toolkit-plugin-webpack'),
      {
        webpack(webpackConfig: any) {
          webpackConfig.externals = {
            react: {
              root: 'React',
              commonjs2: 'react',
              commonjs: 'react',
              amd: 'react',
            },
            'react-dom': {
              root: 'ReactDOM',
              commonjs2: 'react-dom',
              commonjs: 'react-dom',
              amd: 'react-dom',
            },
            'prop-types': {
              root: 'PropTypes',
              commonjs2: 'prop-types',
              commonjs: 'prop-types',
              amd: 'prop-types',
            },
            ...config.externals,
          };

          webpackConfig.output.path = resolve(process.cwd(), outDirDirs.umd);
          webpackConfig.output.library = moduleName;
          webpackConfig.output.libraryTarget = 'umd';

          // @ts-ignore
          if (config.webpack) {
            // @ts-ignore
            config.webpack(webpackConfig);
          }
          return webpackConfig;
        },
      },
    ],

    [
      require.resolve('@alicloud/console-toolkit-plugin-styled-components-isolation'),
      {
        ...config,
      },
    ],

    [
      require.resolve('@alicloud/console-toolkit-plugin-less'),
      {
        src: './src/',
        lib: babelOutputDir,
      },
    ],

    [
      require.resolve('@alicloud/console-toolkit-plugin-sass'),
      {
        src: './src/',
        lib: babelOutputDir,
      },
    ],

    [
      require.resolve('@alicloud/console-toolkit-plugin-storybook'),
      {
        webpackConfigPaths: [
          resolve(__dirname, 'configWebpack.js'),
          ...(config.webpackConfigPaths || []),
        ],
      },
    ],

    [
      require.resolve('@alicloud/console-toolkit-plugin-unit-jest'),
      {
        babelOptions: babelOptionsForJest,
        babelJestTransformPatterns: config.babelJestTransformPatterns || [
          '^.+\\.jsx?$',
        ], // 默认用babel-jest转所有.js文件
        processJestConfig: async (
          originalJestConfig: any,
          pluginAPI: PluginAPI,
          pluginOpts: PluginOptions
        ) => {
          const newJestConfig = { ...originalJestConfig };

          newJestConfig.transformIgnorePatterns =
            newJestConfig.transformIgnorePatterns || [];
          newJestConfig.transformIgnorePatterns.push(
            'node_modules/(?!(@ali/wind-action-creator|@ali/wind-service|@ali/wind-dev-utils|@ali/wind/lib|@ali/wind-rc-link/lib)/)'
          );

          newJestConfig.moduleNameMapper = newJestConfig.moduleNameMapper || {};
          const projectRoot = pluginAPI.getCwd();
          let pkgJson;
          try {
            pkgJson = require(join(projectRoot, 'package.json'));
          } catch (err) {
            error(`cant find package.json under ${projectRoot}`);
            throw err;
          }
          const pkgName = pkgJson.name;
          newJestConfig.moduleNameMapper[`^${pkgName}(.*)$`] = '<rootDir>$1';

          if (typeof config.processJestConfig === 'function') {
            return config.processJestConfig(newJestConfig);
          } else {
            return newJestConfig;
          }
        },
        bootJest: config.bootJest,
      },
    ],
  ];

  if (config.useTypescript || config.typescript) {
    plugins.push([
      require.resolve('@alicloud/console-toolkit-plugin-typescript'),
      {
        ignoreWebpackModuleDependencyWarning: true,
        disablePolyfill: true,
      },
    ]);
  }

  if(config.docs) {
    plugins.push([
      require.resolve('@alicloud/console-toolkit-plugin-docs'),
      config.docs
    ]);
  }

  return {
    plugins,
  };
};