代码之家  ›  专栏  ›  技术社区  ›  David Gomez

将React组件库与汇总.js第1版

  •  1
  • David Gomez  · 技术社区  · 7 年前

    我正在开发一个开源的D3/React组件库,并尝试使用汇总.js提供分码、三抖等。

    该库已在中发布 GitHub NPM 你可以查一个 codesandbox

    接下来,我将尝试强调我在这个捆绑包中遇到的不同问题。

    Rollup.js configuration file 在我的项目中。

    import { readdirSync } from 'fs';
    import path from 'path';
    import babel from 'rollup-plugin-babel';
    import commonjs from 'rollup-plugin-commonjs';
    import external from 'rollup-plugin-peer-deps-external';
    import replace from 'rollup-plugin-replace';
    import resolve from 'rollup-plugin-node-resolve';
    import { terser } from 'rollup-plugin-terser';
    
    const CODES = [
      'THIS_IS_UNDEFINED',
      'MISSING_GLOBAL_NAME',
      'CIRCULAR_DEPENDENCY',
    ];
    
    const getChunks = URI =>
      readdirSync(path.resolve(URI))
        .filter(x => x.includes('.js'))
        .reduce((a, c) => ({ ...a, [c.replace('.js', '')]: `src/${c}` }), {});
    
    const discardWarning = warning => {
      if (CODES.includes(warning.code)) {
        return;
      }
    
      console.error(warning);
    };
    
    const env = process.env.NODE_ENV;
    
    const plugins = [
      external(),
      babel({
        exclude: 'node_modules/**',
      }),
      resolve(),
      replace({ 'process.env.NODE_ENV': JSON.stringify(env) }),
      commonjs(),
      env === 'production' && terser(),
    ];
    
    export default [
      {
        onwarn: discardWarning,
        input: 'src/index.js',
        output: {
          esModule: false,
          file: 'umd/silky-charts.js',
          format: 'umd',
          name: 'silkyCharts',
        },
        plugins,
      },
      {
        onwarn: discardWarning,
        input: getChunks('src'),
        output: [
          { dir: 'esm', format: 'esm', sourcemap: true },
          { dir: 'cjs', format: 'cjs', sourcemap: true },
        ],
        plugins,
      },
    ];
    

    错误

    当我尝试直接从NPM包使用生产包(这是默认的)来使用库时,我从一个块中得到了以下错误 node_modules/silky-charts/esm/chunk-501b9e58.js:5833

    TypeError: react__WEBPACK_IMPORTED_MODULE_0___default(...) is not a function
    

    如果我不使用开发包,我会得到一个不同的错误:

    Failed to compile
    ../silky-charts/esm/index.js
    Module not found: Can't resolve 'react' in '/Users/davidg/Development/personal/silky-charts/esm'
    

    此错误迫使我安装React、ReactDOM和样式化组件,因为库的项目中的devdependency可以访问这些项目代码。


    Hooks can only be called inside the body of a function component.
    

    我已经知道了 filled an issue 在React项目页面中,根据他们的说法,这不是React问题,但可能是一个Web包的问题,因为当您必须在项目和库中安装React时,Web包通常会发现此错误,并且Web包发现有两个React实例,我有点同意,因为错误会因包类型或导入程序项目的运行方式而异,正如您在 代码沙盒 .


    我希望你能帮助我发现汇总配置文件中的错误,如果你想在项目事件中做公关更好。

    0 回复  |  直到 7 年前