【问题标题】:Failed to minify the code from this file无法缩小此文件中的代码
【发布时间】:2017-08-14 09:37:56
【问题描述】:

我正在创作一个我想放在npm 上的JavaScript 库。我目前在另一个项目中使用该库,并且已使用其 GitHub 存储库将其添加为依赖项:

"dependencies": {
  // ... others
  "react-web-component": "LukasBombach/react-web-component",
}

我也在使用带有 UglifyJsPlugin 的 Webpack。现在,当我想构建我的项目时,我收到一个错误:

编译失败。

压缩此文件中的代码失败:

./packages/react-scripts/node_modules/react-web-component/src/index.js line 18:0

在此处阅读更多信息:https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#npm-run-build-fails-to-minify

error 命令失败,退出代码为 1。

这是我图书馆的问题。当我从我的部门(和我的代码)中删除它时,编译工作。

我不知道问题出在哪里,我的代码看起来很简单:

const ReactDOM = require('react-dom');
const retargetEvents = require('./retargetEvents');
const getStyleElementsFromReactWebComponentStyleLoader = require('./getStyleElementsFromReactWebComponentStyleLoader');

module.exports = {
  create: function(app, tagName, options) {
    const proto = Object.create(HTMLElement.prototype, {
      attachedCallback: {
        value: function() {
          const shadowRoot = this.createShadowRoot();
          const mountPoint = document.createElement('div');
          getStyleElementsFromReactWebComponentStyleLoader().forEach(style =>
            shadowRoot.appendChild(style)
          );
          shadowRoot.appendChild(mountPoint);
          ReactDOM.render(app, mountPoint);
          retargetEvents(shadowRoot);
        },
      },
    });
    document.registerElement(tagName, { prototype: proto });
  },
};

retargetEventsgetStyleElementsFromReactWebComponentStyleLoader 内部需要简单的module.export 命令。你可以看到他们的源代码herehere

我已经尝试使用 ES6 导出/导入命令发布我的库。

我的库的完整源代码(只有这3个文件)可以在https://github.com/LukasBombach/react-web-component找到

【问题讨论】:

  • 你忘记添加 react 标签了。
  • 如果我理解正确,您的意思是我不需要 React 库。这不是问题,我这里不需要。
  • 没有。由于有反应代码,我认为反应必须做一些我不确定的事情。如果是,添加标签 react 将帮助您将此问题带到 react 开发人员
  • 这真的不是问题,因为我这里没有使用 React。我正在使用一个编译的反应类,对我来说,函数只是一个任意对象
  • 我找到了解决办法

标签: javascript node.js minify uglifyjs2


【解决方案1】:

对于那些您面临问题的人。首先检查你的 package.json 是否使用 React-script 1.x。如果是,请尝试升级到 2.x.x。

来自官方疑难解答文档npm run build fails to minify

npm run build failed to minify 在react-scripts@2.0.0之前,这个问题 由第三方node_modules 使用现代 JavaScript 引起 功能,因为压缩器在构建期间无法处理它们。 这已通过编译标准的现代 JavaScript 功能得到解决 在node_modules 内部react-scripts@2.0.0 及更高版本。

如果您看到此错误,您可能使用的是旧版本的 react-scripts。您可以通过避免依赖项来修复它 使用现代语法,或升级到react-scripts@>=2.0.0 和 按照变更日志中的迁移说明进行操作。

升级者。

npm install --save --save-exact react-scripts@2.x.x

yarn add --exact react-scripts@2.x.x

【讨论】:

    【解决方案2】:

    对于仍然面临这个问题的人,我在这里找到了一个适合我的解决方案;我会在这里一步一步解释:

    最近我参与了一个项目,该项目使用旧版本的 create-react-appwebpack@3uglifyJsPlugin 在它的 webpack 配置中。当我使用该项目时,当我安装其他 npm 包并在开发模式下使用它们一段时间时出现了主要问题和问题。在我完成了他们的任务之后,当我想构建项目时,我面临着以下问题:

    cannot minify code from this file blah blah blah...
    

    缩小js文件时出现的问题,所以我想如果我改变webpack.config.prod的配置来改变它的缩小过程,那么我就能解决这个问题。所以我检查了webpack.config.prod 文件,发现它使用uglifyJsPlugin 进行缩小。我将配置更改为使用terser-webpack-plugin,然后我收到另一个错误,指出此pkg 用于webpack@4。最后,我最终将terser-webpack-plugin-legacy 用于我的webpack@3 配置,并且效果很好。请注意,我的create-react-app 已被弹出。

    【讨论】:

    • 这对我来说是唯一现实的解决方案。我刚刚在旧的 UglifyJsPlugin 中添加了 Terser 插件(尽管有官方文档)。我很好奇你的实际设置是什么
    • 拯救了我的一天,谢谢!我有同样的问题和 webpack/react 设置,react-app 被拒绝。只需删除 uglifyJsPlugin 并替换为 terser-webpack-plugin-legacy 即可修复 webpack 缩小问题。只需在 webpack 配置中使用 new TerserPlugin(),。对于 webpack 3.x.x 配置,旧文档有点混乱。现在构建大小实际上也有所改善\o/
    • 它也对我有用,我花了一整天的时间试图弄清楚发生了什么。但最终它奏效了
    • 您也可以尝试在缩小之前添加/修改转译步骤(例如,如果使用 webpack + babel,请将库目录添加到您的babel-loader 配置的include 列表中)。
    【解决方案3】:

    我找到了解决办法!

    我的代码中有一些 ES6 特性,即 foreach ~ 运算符和速记函数语法。丑陋者不接受这一点。我需要用 ES5 代码替换它,它现在运行良好。

    【讨论】:

    • 如果代码在您的一个或多个node_modules 包中,您会怎么做?
    • @shivavelingker 我相信我最终使用了一个已经预编译为 ES5 并与 Electron 一起使用的不同节点包。如果您找到更好的解决方案,请在此处提供。
    • @JoshuaPinter 它与更新反应脚本一起工作,因为它在 .js 之前解析 .mjs 。 npm install --save --save-exact react-scripts@1.1.2
    • 正如@HarishRana 建议的那样,它对我有用:相同的错误(尝试缩小 PNotify 4.0-alpha.4)已修复,将“react-scripts=1.1.5”更新为“2.05”(最新)在 package.json。 JoshuaPinter 的选项是另一个很好的解决方法。
    • 我不会将降级称为解决方案。您最终必须找到更好的解决方案。
    【解决方案4】:

    对于任何遇到升级react-scripts 不是解决方案的问题的人,这是我的故事:

    首先,我将vscode 与一些自动导入插件一起使用,该插件会自动在顶部添加导入。它工作正常......直到昨天。

    今天我在本地分支上运行了部署脚本(我上次运行它是在上周),我收到了这个可怕的错误消息,特别是:

    Failed to minify the code from this file:
    
        ./node_modules/re-reselect/src/cache/FifoObjectCache.js:4
    

    这没有任何意义,因为 master 构建工作正常,从那时起我没有更新我的包。

    绝望,我开始逐个提交构建提交(实际上我是从第一个提交开始的,然后当它在中间尝试其他一些提交时,等等)寻找罪魁祸首。

    然后我找到了!

    自动导入插件在我的代码中添加了以下导入:

    import createCachedSelector from 're-reselect/src/index';
    

    什么时候应该:

    import createCachedSelector from 're-reselect';
    

    导致一些 reselect 源文件被编译,而不是使用库已经编译的源文件。

    TL;DR; 不要相信您的自动导入插件。绝不。曾经。 :facepalm:

    【讨论】:

    • 那东西臭名昭著
    • 花了我三天,但我终于找到了 --> import { cloneDeep } from '@babel/types';而不是 --> 从 'lodash/cloneDeep' 导入 cloneDeep;
    • 现在在设置中关闭它们 --> "typescript.suggest.autoImports": false "javascript.suggest.autoImports": false
    【解决方案5】:

    我通过导入外部库的缩小版本解决了这个问题。 FE for socket.io-client 更改

    import io from 'socket.io-client';

    import io from 'socket.io-client/dist/socket.io.js';

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 2021-12-10
      • 1970-01-01
      • 2016-07-05
      • 2018-10-05
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多