Как я могу оставлять комментарии при минимизации кода React? - PullRequest
2 голосов
/ 19 июня 2019

У меня есть следующий JSX в приложении React:

render() {
  return (
    <div>
      {/* A JSX comment */}
    </div>
  )
}

Я использую веб-пакет для компиляции и минимизации кода.

В моих плагинах для веб-пакетов я использую UglifyJsPlugin, чтобы попытаться сохранить комментарии:

new webpack.optimize.UglifyJsPlugin( {
    compress: {
        warnings: false,
        // Disabled because of an issue with Uglify breaking seemingly valid code:
        // https://github.com/facebookincubator/create-react-app/issues/2376
        // Pending further investigation:
        // https://github.com/mishoo/UglifyJS2/issues/2011
        comparisons: false,
    },
    mangle: {
        safari10: true,
        except: ['__', '_n', '_x', '_nx' ],
    },
    output: {
        comments: true,
        // Turned on because emoji and regex is not minified properly using default
        // https://github.com/facebookincubator/create-react-app/issues/2488
        ascii_only: true,
    },
    extractComments: false,
    sourceMap: shouldUseSourceMap,
} ),

comments:true сохраняет некоторые комментарии от React, но мой комментарий от JSX /* A JSX comment */ удаляется из минимизированного кода. Как я могу предотвратить удаление этого комментария из сокращенного / рабочего кода?

Также мое правило модуля Babel с включенными комментариями:

{
    test: /\.(js|jsx|mjs)$/,
    exclude: /(node_modules|bower_components)/,
    use: {
        loader: 'babel-loader',
        options: {
            // @remove-on-eject-begin
            babelrc: false,
            presets: [ require.resolve( 'babel-preset-cgb' ) ],
            // @remove-on-eject-end
            // This is a feature of `babel-loader` for webpack (not Babel itself).
            // It enables caching results in ./node_modules/.cache/babel-loader/
            // directory for faster rebuilds.
            cacheDirectory: false,
            comments: true,
        },
    },
},

1 Ответ

2 голосов
/ 19 июня 2019

Я погрузился в репозиторий Babel и обнаружил сообщение об ошибке

Как сохранить комментарий jsx после преобразования babel # 7153

это было исправлено в прошлом году, и пришло исправлениев 7.0.0-бета.37 .поэтому, если эта функция действительно важна для вас, вам нужно изменить версию Babel.

[UPD] Я считаю, что это просто крайний случай для ошибки, упомянутой выше.

Как мы можем видеть на онлайн-песочница ваш код переносится в

render() {
  return React.createElement("div", null);
}

, но как только я укажу хотя бы явное null:

render() {
  return (
    <div>
      {null/* A JSX comment */}
    </div>
  )
}

, он не будет отбрасывать комментарии:

render() {
  return React.createElement("div", null, null
  /* A JSX comment */
  );
}

Таким образом, комментарии удаляются, только если в одном блоке нет других токенов.

, так как старая ошибка была закрыта навсегда, я поставил новую # 10118, так что, кто бы ни нашел эту тему, ищетРешение лучше проверить этот билет на обновления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...