【问题标题】:How to disable Uglify in react build如何在反应构建中禁用 Uglify
【发布时间】:2017-09-10 08:11:21
【问题描述】:

我尝试使用 Y.js (Yjs) npm 包,它在 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" }
    ]
  }
}

如何在我的 webpack 中禁用 Uglify?哪条线决定了它在构建过程中必须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"
  }
}

实际上是的,我认为它使用 react-script。有什么办法可以改变吗?

【问题讨论】:

  • 请粘贴您的 package.json。您的配置文件未设置为使用 uglify。可能 package.json 文件中的 build 脚本运行带有 -p 选项的 webpack,内部使用了 Uglify。
  • 当你对 Webpack 感到满意时,尝试Babili 来缩小 ES6。
  • 我添加了我的 package.js,它实际上提醒我它使用了我猜我无法控制的 react-script。然后我假设我的构建系统可能根本没有使用我的 webpack.config.js。 webpack.config.js 的常见用法是什么?
  • @MiguelMota 我最终取出了 webpack 中的 build 属性,这暂时解决了问题,但不适合生产目的。最终我弃用了 Yjs 并自己编写了 sync。

标签: javascript reactjs webpack uglifyjs


【解决方案1】:

如果你看看npm run build 做了什么,它实际上运行了另一个脚本react-scripts build。你的项目是用create-react-app 引导的,对吗?

正如您在package.json 中看到的,您还可以访问名为eject 的脚本。

运行 npm run eject 将允许您从预配置的工作流(webpackbabel 等)中删除应用,并让您根据需要修改工作流。

通过访问配置文件,您可以添加例如babel uglify plugin

但要小心,有一个权衡。正如文档提到的那样

如果您的项目需要更多自定义,您可以“弹出”并自定义它,但您需要维护此配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2017-11-09
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多