【问题标题】:es6 not working for my custom npm modulees6 不适用于我的自定义 npm 模块
【发布时间】:2017-05-06 09:05:50
【问题描述】:

我刚刚将我的 javascript 应用程序的一部分(用 Vue2 和 nuxt.js 编写,但这并不重要)提取到外部 npm 包中。

我的主应用程序使用 babel 进行 es6 代码,并且在该包中编写的所有文件都使用 es6 语法。问题是 - 在将 es6 代码提取到外部 npm 模块后,uglifyjs 开始抱怨它们的语法。错误表明 uglify 将它们视为常规 javascript 文件,而不是 es6。

如何告诉 node 将我的包文件视为 es6?


编辑:

很抱歉没有提供代码示例,但实际上并没有太多可展示的内容。我有一个由 nuxt.js/vue-cli 生成器生成的常规 webpack 应用程序。它使用 babelify 和 uglify 使其能够使用 es6 sytnax。所有主应用程序都是使用 es6 编写的。

假设我将两个文件移动到外部模块 - AB(都在 es6 中)。 A 模块需要 B 模块,这就是 uglify 抱怨的时候 - B 文件不是用 es5 编写的。由于某种原因,内部所需的模块似乎没有首先得到 babelified。这是预期的行为吗?

【问题讨论】:

  • 什么代码?我看到的都是文字
  • 我无法将文件发送给您,因为它受版权保护,但这是类似的假文件:gist.github.com/mbajur/bb355a5fd310ab5c59b763c25e744c6c - 我试图从该包中的另一个文件中要求它,这就是事情变得混乱的时候(uglify 在第 3 行抱怨出乎意料的( 并期待:
  • 你是如何使用 uglify 的?理想情况下,您应该对代码进行 babelifying,然后对最终结果进行 uglifying。当然,如果你把丑陋的代码输入 babel,它可能不会理解它。
  • 您需要有关您不会共享的代码的帮助 - 看起来这是您的问题
  • 是的,这就是我想发生的事情(我正处于使用 webpack/js/uglify/babel/etc 的旅程的开始) - 似乎整个应用程序都是 babelified 但当需要来自 node_modules 的外部文件 - 该文件没有首先得到 babelified。我更新了我的原始帖子以包含更多详细信息

标签: javascript node.js ecmascript-6 babeljs


【解决方案1】:

解决方案很少,

其中之一是将您提取的模块作为供应商的一部分提及,因此在 webpack 中您将拥有:

entry: {
    ...
    vendor: [
        'jquery', 
        'my-extracted-module'
    ]
},

并使用CommonsChunkPlugin

plugins: [
    new webpack.optimize.CommonsChunkPlugin({
        name: 'vendor',
        filename: 'vendor.js'
    })
]

并将my-extracted-module 编译为独立的(您可以在其 package.json 中使用 es:next 功能)

另一种解决方案是告诉 webpack 在构建时包含该包,请参阅

https://github.com/webpack/webpack/issues/2031

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多