'主题' rollup.js

时间:2016-10-10 09:29:42

标签: javascript angular rxjs rollupjs

我正在尝试将我的项目设置为使用汇总,作为angular2移动到AOT编译的一部分,但是,我遇到了以下问题。

  

错误:'主题'不是由node_modules \ rxjs \ Subject.js

导出的

这是我的 rollup.js 文件:

import rollup from 'rollup';
import nodeResolve from 'rollup-plugin-node-resolve'
import commonjs    from 'rollup-plugin-commonjs';
import uglify      from 'rollup-plugin-uglify'

export default {
  entry: 'client/main.js',
  dest: 'public/assets/js/build.js',
  sourceMap: false,
  format: 'iife',
  plugins: [
      nodeResolve({jsnext: true, module: true}),
      commonjs({
        include: 'node_modules/rxjs/**',
        include: 'node_modules/angular2-jwt/**',
      }),
      uglify()
  ]
}

为什么会这样,我跟着angular2食谱指南?

3 个答案:

答案 0 :(得分:9)

您需要将namedExports选项与rollup-plugin-commonjs一起使用:https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports

此外,您可能会发现它对include: 'node_modules/**'而不是单个包很有用,否则依赖项的任何依赖都会绕过插件(在上面的配置中,您有重复的include属性 - 也许这就是只是一个错字?如果您需要传递多个值,请使用数组)。

commonjs({
  include: 'node_modules/**',
  namedExports: {
    'node_modules/rxjs/Subject.js': [ 'Subject' ]
  }
})

答案 1 :(得分:0)

我终于在我的系统上找到了这个。

指定的导出解决方案是错误的,因为rollup-plugin-commonjs会处理Subject.js中的导出。

我的问题是"包括" rollup-plugin-commonjs中的选项。

有两个问题。

第一:在选项中指定包含为" node_modules / rxjs / **"你必须确保完整的路径可以解决到你期望的目的。

示例:

我从" c:/ foo / build"运行我的构建命令但我的文件在" c:/ my-source"那么包含模式可能会解析为" c:/ build / node_modules"这意味着当commonjs插件检查它是否应该处理" node_modules / rxjs / "它会看到" c:/ my-source / node_modules / rxjs / "不匹配" c:/ build / node_modules / rxjs / **"因此它不会将出口转换为ES6。

第二个问题是区分大小写。包含模式区分大小写。这也使我绊倒了。

这两个问题都可以通过打开" node_modules \ rollup-plugin-commonjs \ dist \ rollup-plugin-commonjs.cjs.js"来确认。文件和调试"转换"功能

如果修改代码(在转换函数的最开头)就是这样的

if (id.includes('rxjs\\Subject.js')) {
        debugger;
}

然后在调试器中运行代码,您可以逐步执行代码,直到它到达过滤器函数。在那里你会看到过滤器功能正在跳过" rxjs / Subject.js"文件。

我几乎保证在发生错误时这就是问题。

答案 2 :(得分:0)

我发现这可以与符号链接一起发生。