将汇总点指向备用文件以进行导入

Point rollup to alternate file for import

背景:

我们有一个 Angular 2 应用程序,我们希望开始对其使用 AOT 编译。很简单...除了我的依赖项之一...

我们使用 autobahn.js 通过网络套接字连接与我们的服务器通信。问题在于在汇总中加载此依赖项。

autobahn.js 的作者决定,对于他们浏览器版本的库,他们将在 bower(足够公平)而不是 npm 中托管它。

我们有一个库,其中包含 autobahn.js 一些不错的实用程序并为我们处理其他事情。这很棒,因为它是一个通用的解决方案。这个库可以在浏览器和我们的 node.js 服务器中使用。 (耶)

但是 autobahn 的节点版本使用 fsurl 和其他节点特定功能。 (嘘)

他们库的 bower 版本对浏览器使用了正确的等价物,这很好。

在包装器中我们有一个 import * as autobahn from 'autobahn';(我们使用打字稿)这在节点中工作得很好,并且在 SystemJS 中使用一些配置也能正常工作。

问题:

如何告诉 rollup(或 rollup-plugin-commonjs)指向 bower_components/autobahnjs/autobahn.js 文件而不是默认情况下指向 node_modules/autobahn/index.js 文件。

当前配置:

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

export default {
  entry: 'dist/iss/index.js',
  dest: 'dist/iss/bundle.js',
  sourceMap: false,
  format: 'iife',
  moduleName: 'statusMonitor',
  external: [
    'autobahn',
    'moment',
    'moment-timezone'
  ],
  context: 'window',
  plugins: [
    nodeResolve({jsnext: true, module: true, browser: true}),
    commonjs({
      include: 'node_modules/**'
    }),
    json(),
    uglify()
  ]
}

其他选项:

另一个对我们有用的选项是 autobahn 也可以作为一个全局的,如果我们可以修补 rollup 以使用全局 autobahn 关闭 window 那么它就可以工作对于我们的用例。

有一个类似于 node-resolve 的 rollup-plugin-bower-resolve 插件——如果你将它包含在你的 plugins 数组中 before node-resolve(或使用node-resolve 中的 skip 选项)那么它应该能够找到 autobahn.

现在在 npm 上

https://github.com/crossbario/autobahn-js-browser

The browser version is published to npm under the name autobahn-browser. Install with:

npm install autobahn-browser

Note: the NodeJS version of Autobahn continues to be published under the name autobahn.