【问题标题】:Uglifyjs unexpected token name errorUglifyjs 意外令牌名称错误
【发布时间】:2018-04-11 07:21:15
【问题描述】:

附件是我在尝试将项目捆绑用于生产时收到的图像。如图所示,我收到了Unexpected token name <<Object>>, expected punc <<,>> 消息。

Terminal output of error

不确定是什么问题,但我尝试使用 uglify-es 和 uglify-js 并得到相同的错误。我什至尝试使用 es6+ 代码制作一个简单的应用程序,以查看 uglify-js 是否有效并且确实有效。因此,互联网上一些较旧的线程提到 uglify-js 无法处理 es6+ 代码现在可能已经无关紧要了。我还在某处读到最新版本 (3.x) 确实支持它,但无法确认。

我很想展示一些代码,但不确定我需要展示哪些相关的代码。根据图像,它还提到了行、col、pos 等......但该行上的代码并不以提到的 col 编号开始。

我一定会在调查时更新这篇文章,但任何提示或想法都会很棒!

【问题讨论】:

    标签: reactjs bundle uglifyjs


    【解决方案1】:

    因此,经过深入研究,该问题现已解决。看起来我在我的非优化包 app.js 中查看的第 1665 行不是我需要查看的(很明显,因为列索引很远)。

    因此,我决定输出 FuseBox 正在处理的捆绑生成代码,它实际上是不同的。这是我在uglifyBundle function 内的node_modules/fuse-box/quantum/plugin/BundleWriter.js 中添加的行,用于输出内容,以便我可以清楚地阅读。

    fs.writeFile('bundle.txt', bundle.generatedCode); 
    

    bundle.txt 中的输出是问题所在,我的实际 TypeScript 代码如下所示:

    // bundle.txt line 1665
    this.wholesalerSettings = [object Object]
    
    // actual project code
    constructor() {
        this.wholesalerSettings = process.env.WHOLESALERSETTINGS;
        this.API = this.setHostUrl();
    }
    

    所以我查看了我的 fuse.ts 文件,发现我没有正确解析 json 对象。

    public get wholesalerSettings()
    {
        const wholesaler = require(`./src/~/wholesalers/${this.wholesaler}/config.json`);
        return JSON.stringify(wholesaler);
    }
    
    // then down in the environment plugin
    EnvPlugin({ 
        WHOLESALERSETTINGS: this.wholesalerSettings,
        IMAGE_PATH: this.imagePath
    }),
    

    一旦我用JSON.stringify 正确解析了对象,它就可以完美地工作,因为process.env.WHOLESALERSETTINGS 现在是一个JSON 字符串而不是一个对象。

    我第一次真正处理 devops 的东西,但很有趣,同时压力很大。我想我学到的主要内容是当您处理工具和第三方工具(FuseBox 使用 uglify-js)时,您需要仔细查看该工具的输入,而不是像我一样的输出一开始。

    【讨论】:

    • 干得好,去接受答案(不管是不是你自己;-))
    • 显然需要等到明天
    【解决方案2】:

    UglifyJS 说它看到了Object,它期待,,所以我们可以推断:

    • 您编写的代码(或在 uglifyJS 处理它之前由其他工具生成,例如 babel?虽然您可能不使用 babel,因为您的 uglifyJS 直接处理 es6)是“​​Object”,其中发生错误。
    • 它需要一个,,所以错误发生在某个地方,例如多变量声明let foo, bar,或对象/数组定义[1, 2]{foo: 1, bar: 2}

    【讨论】:

    • 所以它是一个打字稿项目,你会建议先使用 babel 转译它吗?尽管我一直在测试项目中使用 typescript 项目和 es6+ 代码,并且构建得非常好。显然,我遇到的项目要复杂得多,规模要大得多。
    • 有更多信息,可能会在接下来的一段时间内得到答案......我认为这可能与我的 FuseBox 设置有关。会让你知道
    猜你喜欢
    • 2018-08-27
    • 1970-01-01
    • 2018-05-14
    • 2018-03-03
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多