Как отключить Uglify в сборке реакции

Я пытался использовать пакет npm Y.js (Yjs), и он работает в npm start, но не npm run build, потому что Uglify не поддерживает ES6. Поэтому я скачал выпуск этого пакета и включил его напрямую. Но мой reactjs npm run build все еще жалуется на Uglify.

Creating an optimized production build...
Failed to compile.

static/js/main.3d2ecf94.js from UglifyJs
SyntaxError: Unexpected token: name (YArray) [./src/Pages/Collaborative/y-array/y-array.es6:12,0]

и мой webpack.config.js выглядит так:

var path = require('path');

module.exports = {
  entry: path.join(__dirname, 'public', 'quickstart.js'),
  output: {
    path: '/',
    filename: 'bundle.js'
  },
  module: {
    loaders: [
      {
        test: /.jsx?$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        query: {
          presets: ["react", "es2016", "stage-2"]
        }
      },
      { test: /\.css$/, loader: "style-loader!css-loader" }
    ]
  }
}

Как отключить Uglify в моем веб-пакете? Какая строка определяет, что она должна быть уменьшена в процессе сборки?

Изменить:

{
  "name": "myCoolApps",
  "version": "0.1.0",
  "private": true,
  "devDependencies": {
    "css-loader": "^0.26.1",
    "react-scripts": "0.7.0",
    "webpack": "^1.13.3"
  },
  "dependencies": {
    "ace": "git+https://github.com/ajaxorg/ace.git#master",
    "antd": "^2.7.2",
    "axios": "^0.15.3",
    "card": "^2.2.1",
    "card-react": "^1.2.6",
    "chat-template": "0.0.22",
    "codemirror": "^5.25.0",
    "credit-card-type": "^5.0.1",
    "css-loader": "^0.26.1",
    "d3": "^4.7.4",
    "firechat": "^3.0.1",
    "firepad": "^1.4.0",
    "flux": "^3.1.0",
    "gulp": "^3.9.1",
    "gulp-sass": "^3.1.0",
    "history": "^1.17.0",
    "little-loader": "^0.2.0",
    "lodash": "^4.17.4",
    "material-ui": "^0.16.6",
    "moment": "^2.17.1",
    "node-sass": "^4.5.0",
    "quill": "^1.2.3",
    "rc-calendar": "^7.6.5",
    "react": "^15.5.4",
    "react-autosuggest": "^7.0.1",
    "react-cookie": "^1.0.4",
    "react-credit-card": "^0.20.0",
    "react-dom": "^15.5.4",
    "react-dropzone": "^3.8.0",
    "react-event-timeline": "^1.2.2",
    "react-infinite": "^0.10.0",
    "react-infinite-scroller": "^1.0.7",
    "react-list": "^0.8.3",
    "react-notification-system": "^0.2.12",
    "react-router": "^3.0.0",
    "react-tap-event-plugin": "^2.0.1",
    "seedrandom": "^2.4.2",
    "simplewebrtc": "^2.2.2",
    "style-loader": "^0.13.1",
    "superagent": "^3.3.1",
    "y-array": "^10.0.6",
    "y-indexeddb": "^8.1.9",
    "y-leveldb": "0.0.1",
    "y-map": "^10.0.5",
    "y-memory": "^8.0.8",
    "y-richtext": "^9.0.8",
    "y-text": "^9.3.2",
    "y-webrtc": "^8.0.7",
    "y-websockets-client": "^8.0.15",
    "yjs": "^12.1.7"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}

На самом деле да, я думаю, что он использует реагирующий скрипт. Могу ли я что-нибудь сделать, чтобы изменить это?


person Tianhao Zhou    schedule 14.04.2017    source источник
comment
Вставьте свой package.json, пожалуйста. Ваш файл конфигурации не настроен для использования uglify. Вероятно, скрипт build в файле package.json запускает webpack с параметром -p, который внутри использует Uglify.   -  person hazardous    schedule 14.04.2017
comment
Когда вы освоитесь с Webpack, попробуйте Babili для минимизации ES6. .   -  person hazardous    schedule 14.04.2017
comment
Я добавил свой package.js, который на самом деле напоминает мне, что он использует реагирующий скрипт, который, я думаю, не находится под моим контролем. Затем я предполагаю, что, возможно, моя система сборки вообще не использует мой webpack.config.js. Каково обычное использование webpack.config.js?   -  person Tianhao Zhou    schedule 14.04.2017
comment
Вы нашли ответ на это? с такой же проблемой.   -  person Miguel Mota    schedule 01.09.2017
comment
@MiguelMota В итоге я удалил атрибут сборки в веб-пакете, который на данный момент решает проблему, но не подходит для производственных целей. В конце концов я отказался от Yjs и сам написал sync.   -  person Tianhao Zhou    schedule 02.09.2017
comment
Кто-нибудь пробовал это: npmjs.com/package/react-scripts-plugin -без минимизации   -  person ZooZ    schedule 05.12.2017
comment
эй, не могли бы вы опубликовать ответ? как вы удалили атрибут сборки в веб-пакете?   -  person Axel    schedule 13.02.2018
comment
@nzaero Нет, я нашел только временное решение, которое заключается в загрузке релизной сборки пакета и использовании ее в качестве общих модулей. Это не вызовет никаких проблем, так как пакет является предварительно собранным выпуском. Однако, в конце концов, я написал свой собственный модуль, так как их был недостаточно хорош.   -  person Tianhao Zhou    schedule 13.02.2018
comment
@MiguelMota Я обнаружил, что использование готового выпуска в качестве обычного модуля не вызовет этой проблемы. Однако в итоге я написал свою собственную библиотеку синхронизации, так как Yjs недостаточно для моего использования.   -  person Tianhao Zhou    schedule 13.02.2018
comment
я удалил npm, node все, тогда, теперь это работает...   -  person Axel    schedule 18.02.2018


Ответы (1)


Если вы посмотрите, что делает npm run build, на самом деле он запускает другой скрипт, react-scripts build. Ваш проект загружается с помощью create-react-app, правильно?

Как вы можете видеть в package.json, у вас также есть доступ к скрипту под названием eject.

Запуск npm run eject позволит вам удалить приложение из предварительно настроенного рабочего процесса ( webpack, babel и т. д.) и позволит вам изменить рабочий процесс по своему усмотрению.

Имея доступ к файлам конфигурации, вы можете добавить, например, плагин babel uglify.

Но будьте осторожны, есть компромисс. Как упоминается в документах

Если ваш проект нуждается в дополнительной настройке, вы можете «извлечь» и настроить его, но тогда вам нужно будет сохранить эту конфигурацию.

person mayk93    schedule 15.05.2018