Webpack + SemanticUI + React: процесс не определен - PullRequest
0 голосов
/ 27 мая 2018

Я нашел множество сообщений об ошибке Webpack:

Uncaught ReferenceError: process is not defined

, большинство из которых предлагают добавить плагин к webpack.config.js:

plugins: [ 
  // ...
  new webpack.DefinePlugin({
      'process.env': {
      NODE_ENV: JSON.stringify(process.env.NODE_ENV || 'development')
      }
  }),
  // ...
]

, однако это не похоже насделать трюк в моем случае.

Чтобы упростить задачу, я создал репо с минимальным значением для настройки SemanticUI-React с Webpack, который должен быть простым для навигации.Мой конфиг в webpack.config.js в значительной степени вдохновлен этим недавним уроком , который, похоже, содержит много положительных комментариев.

Чтобы воспроизвести ошибку, просто клонируйте репо на вашем компьютере (я используюyarn, но это должно работать и с npm):

git clone https://github.com/sheljohn/minimal-semantic-react
cd minimal-semantic-react/
yarn install
yarn run serve

, который открывается в localhost:3000, и ошибка может быть замечена в консоли разработчика.

Насколько далеконасколько я понимаю, кажется, что когда React загружается, он пытается определить, установлен ли режим производства или разработки, используя переменную process.env.NODE_ENV, которая не определена в браузере.

Это может быть связано сПоле target в конфигурации Webpack (по умолчанию установлено web);но поскольку React загружается из CDN, до пакета, я думаю, он не знает о том, что делает WebPack, что вызывает у меня недоумение, почему добавление плагина в конфигурацию может изменить что-либо ...

Отсюда мой вопрос: Можно ли использовать semantic-ui-реагировать, объявляя большие библиотеки (React, ReactDOM, semantic) внешними? Все работает нормально, если я связываю их, но пакет заканчивается вокруг4 МБ, что довольно много.


Дополнительные сведения

Ошибка, видимая в Chrome (OSX High Sierra, v66.0.3359.181, консоль разработчика):

react.development.js:14 Uncaught ReferenceError: process is not defined
    at react.development.js:14
(anonymous) @ react.development.js:14

и фрагмент кода в строке 14:

if (process.env.NODE_ENV !== "production") {

Файл webpack.config.js

const path = require("path");
const webpack = require("webpack");
const publicFolder = path.resolve(__dirname, "public");

module.exports = {
  entry: "./src/index.jsx",
  target: "web",
  output: {
    path: publicFolder,
    filename: "bundle.js"
  },
  devServer: {
    contentBase: publicFolder,
    port: 3000
  },
  externals: {
    'jquery': 'jQuery',
    'lodash': '_',
    'react': 'React',
    'react-dom': 'ReactDOM',
    'semantic-ui-react': 'semantic-ui-react'
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: 'babel-loader'
        }
      }
    ]
  },
  plugins: [ 
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: JSON.stringify(process.env.NODE_ENV || 'development')
      }
    }),
    new webpack.HotModuleReplacementPlugin()
  ]
};

Файл .babelrc

{
  "presets": ["env", "react"]
}

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Все работает нормально, если я их связываю, но пакет получается около 4 МБ, что довольно много.

Это потому, что вы связываете их в режиме "разработки".Вместо этого попробуйте использовать «production» в вашем скрипте, он будет намного меньше."build": "webpack --mode production"

Если вы объединяете все компоненты в производство без указания внешнего, это будет лучше для автономного приложения.

0 голосов
/ 28 мая 2018

Кажется, я наконец-то решил это:

  • Ошибка # 1 : я использовал cjs версии библиотек React из cdnjs, когда мне нужно быловместо этого использовал umd.Несмотря на то, что стиль UMD уродлив, в браузерах он работает нормально, в то время как CommonJS использует, например, require.См. этот пост для сравнения AMD / CommonJS / UMD.

  • Ошибка # 2 : в webpack.config.js, "имя"для внешнего semantic-ui-react должно быть semanticUIReact (с учетом регистра).Это то, что определено в глобальном window, когда скрипт загружается из CDN (например, jQuery или React).

I updated хранилище с этими исправлениями, и вы сможете воспроизвести этот рабочий пример на своей машине. Этот репозиторий содержит минимум, необходимый для совместной работы SemanticUI, React и Webpack. Это сэкономило бы мне много времени, так что, надеюсь, другие люди получат от этого пользу!

...