сбрасывать ошибку MISSING_NODE_BUILTINS, когда я включаю ее - PullRequest
0 голосов
/ 19 июня 2020

Я продолжаю получать эту ошибку:

src/legacy/widgetlib.tsx → dist/withReact16/browser.js...
{
  code: 'MISSING_NODE_BUILTINS',
  message: "Creating a browser bundle that depends on Node.js built-in module ('punycode'). You might need to include https://www.npmjs.com/package/rollup-plugin-node-builtins",
  modules: [ 'punycode' ],
  toString: [Function]
}

Я включил встроенные модули rollup-plugin-node несколькими разными способами и повсюду гуглил. Каждое «решение», которое я нашел, похоже, в основном одно и то же, но оно не работает для меня. Я также напрямую не использую punycode. У двух моих зависимостей это есть зависимость. Я использую twitter-text lib и oauth-signature. Если я закомментирую эти два импорта, у меня больше не будет этой проблемы. Вот мой полный файл rollup.config. js:

import resolve from '@rollup/plugin-node-resolve';
import postcss from 'rollup-plugin-postcss';
import commonjs from '@rollup/plugin-commonjs';
import babel from 'rollup-plugin-babel';
import json from '@rollup/plugin-json';
import image from '@rollup/plugin-image';
import replace from 'rollup-plugin-replace';
import gzipPlugin from 'rollup-plugin-gzip';
import { terser } from 'rollup-plugin-terser';
import includePaths from 'rollup-plugin-includepaths';
import builtins from 'rollup-plugin-node-builtins';
import globals from 'rollup-plugin-node-globals';
import React from 'react';
import ReactDOM from 'react-dom';

const extensions = ['.js', '.jsx', '.ts', '.tsx'];
const { PRODUCTION } = process.env;

const CODES = [
  'THIS_IS_UNDEFINED',
  'MISSING_GLOBAL_NAME',
  'CIRCULAR_DEPENDENCY',
];

const globalVars = {
  react: 'React',
  'react-dom': 'ReactDOM',
};

const discardWarning = warning => {
  if (CODES.includes(warning.code)) {
    return;
  }
  // eslint-disable-next-line no-console
  console.error(warning);
};

const commonConfig = {
  onwarn: discardWarning,
  plugins: [
    replace({
      'process.env.NODE_ENV': JSON.stringify(
        PRODUCTION ? 'production' : 'development'
      ),
    }),
    image(),
    globals(),
    builtins(),
    resolve({
      jsnext: true,
      extensions,
      preferBuiltins: true,
      browser: true,
      mainFields: ['browser', 'jsnext', 'module', 'main'],
    }),
    includePaths({
      paths: ['src'],
      extensions: [...extensions, '.scss', '.json'],
    }),
    commonjs({
      include: 'node_modules/**',
      namedExports: {
        react: Object.keys(React),
        'react-dom': Object.keys(ReactDOM),
      },
    }),
    babel({
      extensions,
      runtimeHelpers: true,
      babelrc: true,
      exclude: 'node_modules/**',
    }),
    json(),
    postcss({
      plugins: [],
    }),
    terser(),
  ],
};

const browserLibWithReact16 = {
  ...commonConfig,
  input: 'src/legacy/widgetlib.tsx',
  output: {
    format: 'iife',
    sourcemap: true,
    name: 'WLIB',
    file: 'dist/withReact16/browser.js',
  },
  plugins: [...commonConfig.plugins, gzipPlugin()],
};

const npmWLIBWithReact16 = {
  ...commonConfig,
  input: 'src/widgetlib.tsx',
  output: {
    file: 'dist/withReact16/WLIB.js',
    format: 'esm',
    sourcemap: true,
  },
};

const npmLibNoReact = {
  ...commonConfig,
  external: Object.keys(globalVars),
  input: 'src/widgetlib.tsx',
  output: {
    file: 'dist/index.js',
    format: 'esm',
    sourcemap: true,
  },
};

export default [npmLibNoReact, npmWLIBWithReact16, browserLibWithReact16];

Ошибка возникает только для конфигурации browserLibWithReact16.

Любая помощь будет принята с благодарностью.

...