Rollup commonjs

时间:2016-11-05 07:30:28

标签: angular commonjs aot rollupjs

我正在开发一个Angular2项目。我通过Angular2 aot文件,我能够生成ngFactory文件。我按照文档中的建议使用了汇总js。我有一些非es6 npm包。我用过require来加载非es6包。

文档(angular2和汇总)建议使用rollup-plugin-commonjs来捆绑非es6模块。以下是我的汇总配置。

export default {
    entry: 'scripts/main.js',
    dest: 'build/app.js', // output a single application bundle
    sourceMap: true,
    format: 'iife',
    context: 'this',
    plugins: [

        nodeResolve(
            {
                jsnext: true,
                module: true,
            }
        ),
        commonjs({
            include: 'node_modules/**/**',
        })  ,

        uglify()
    ]
}

我有commonjs插件。但仍然是浏览器错误''require is undefined'。如果没有 webpack / browserify 的帮助,如何捆绑非es6模块请提供建议。

1 个答案:

答案 0 :(得分:0)

我目前使用的设置将供应商/应用程序文件拆分为单独的捆绑包。我没有考虑过这个问题 使用AoT,这可能是一个问题,但我确实有使用此方法的commonjs模块。

它确实加快了开发速度,只创建我的应用程序包进行测试(我遇到了Webpack和20s构建时间的问题)。

在vendor.ts文件中(我的文件与main.ts文件在同一个目录中)我有以下内容:

import * as _leaflet from 'leaflet/dist/leaflet'; //leaflet is installed via npm in this case.
...
export default {
    ...
    _leaflet
};

还有一个vendor.rollup.js文件,它使用commonjs插件,如:

commonjs({
    include: [
        helpers.root('node_modules', '**') //This is just a method to make an absolute path to node_modules. See Angular 2 webpack docs for that.
    ]
})

创建供应商包。

然后在我的app.rollup.js(配置文件中创建我的应用程序包)。

export default {
    entry: 'src/main.ts',
    dest: 'bundles/app.js',
    format: 'iife',
    sourceMap: true,
    moduleName: 'app',
    plugins: [
        ...
    ],
    external: [
        'leaflet/leaflet'  //Yeah, you can rename it to have nicer looking imports.
    ],
    globals: {
        ...
        'leaflet/leaflet': 'vendor._leaflet'  //And map it to the correct global var here.
    }
};

最后在我的应用程序中我可以使用

import * as L from 'leaflet/leaflet';

提醒:我还没有尝试使用AoT编译或生产代码,一步一步。