- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 rollup 来使用 UMD 捆绑 ng2 模块,但 ng2 依赖项并没有像我预期的那样被排除:
汇总选项:
{
format: "umd",
moduleName: "mymodule",
dest: "dist/app.bundle.umd.js",
sourceMap: true
}
节点解析插件 (rollup-plugin-node-resolve)
nodeResolve({
jsnext: true,
module: true,
skip: [
"@angular/common",
"@angular/compiler",
"@angular/compiler-cli",
"@angular/core",
"@angular/forms",
"@angular/http",
"@angular/platform-browser",
"@angular/platform-browser-dynamic",
"@angular/platform-server",
'rxjs'
]
}),
这个的输出是:
exports.AppModule = __decorate([
_angular_core.NgModule({
imports: [
_angular_platformBrowser.BrowserModule,
_angular_http.HttpModule
],
declarations: [AppComponent],
providers: [],
bootstrap: [AppComponent],
exports: [AppComponent]
})], exports.AppModule);
通过跳过 ng2 依赖项,Rollup 似乎创建了全局依赖项,其中 _angular_core
、_angular_http
和 _angular_platformBrowser
需要全局定义。
我希望保留依赖关系但不作为全局依赖关系。例如,这是 tsc
在定位 umd
时产生的:
"use strict";
var core_1 = require("@angular/core");
var app_component_1 = require("./app.component");
var platform_browser_1 = require("@angular/platform-browser");
var http_1 = require("@angular/http");
var AppModule = (function () {
function AppModule() {
}
return AppModule;
}());
AppModule = __decorate([
core_1.NgModule({
imports: [
platform_browser_1.BrowserModule,
http_1.HttpModule
],
declarations: [app_component_1.AppComponent],
providers: [],
bootstrap: [app_component_1.AppComponent],
exports: [app_component_1.AppComponent]
})
], AppModule);
exports.AppModule = AppModule;
您可以看到 require
语句嵌入到 UMD 模块中(这是我试图实现的),而不是定义全局依赖项。
我可能没有正确使用汇总。我究竟做错了什么?
也许 Rollup 是错误的工具,有人可以推荐更好的工具吗?我正在使用 gulp 进行构建。
最佳答案
我得到了 rollup 工作。
构建的目标是 es6 模块,然后使用汇总:https://github.com/rollup/rollup/wiki/Migrating-from-Esperanto
世界语也起作用并引导我找到了解决方案。虽然它已被弃用,但它确实会产生更清晰、更易读的代码:https://www.npmjs.com/package/esperanto
tsc --module es6
const pkg = require('./package.json')
const rollup = require('rollup');
gulp.task('rollup:module', function() {
rollup.rollup({
// no more `base` – internal module paths
// should be relative
entry: pkg.main
}).then( function ( bundle ) {
bundle.write({
// you can do `var umd = bundle.generate({...})
// instead, and write the file yourself if
// you prefer
dest: `${pkg.name}.bundle.umd.js`,
// use this instead of `toUmd`
format: 'umd',
// this is equivalent to `strict: true` -
// optional, will be auto-detected
exports: 'named',
// `name` -> `moduleName`
moduleName: pkg.name,
// `names` -> `globals`
globals: {
'other-lib': 'otherLib'
}
});
});
rollup 的好处在于它可以对更小的优化包进行 tree shaking。您还可以轻松定位多种包格式:
//UMD
bundle.write({
dest: `dist/${pkg.name}.bundle.umd.js`,
format: 'umd',
exports: 'named',
moduleName: pkg.name,
globals: {
}
});
//CommonJS
bundle.write({
dest: `dist/${pkg.name}.bundle.cjs.js`,
format: 'cjs',
exports: 'named',
moduleName: pkg.name,
globals: {
}
});
//AMD
bundle.write({
dest: `dist/${pkg.name}.bundle.amd.js`,
format: 'amd',
exports: 'named',
moduleName: pkg.name,
globals: {
}
});
关于angular2 如何在没有 ng2 依赖项的情况下捆绑 UMD 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42354212/
我正在尝试使用模块捆绑器 ParcelJS 构建一个模块。我希望这个特定模块对导入友好: 它应该是导入友好的 (ES6) 它应该是友好的(节点) 它应该是 script-src 友好的(浏览器) 它应
按照 Angular 教程,可以看到: 用于https://angular.io/docs/js/latest/guide/forms.html同时, 用于https://angular.io/d
我正在编写一个不可知的日志记录机制,它可以在浏览器和 nodejs 中运行(例如,nodejs 中缺少 console.debug)。 // UMD with no dependencies (fun
假设我有一个像这样的 UMD 模块(保存在 'js/mymodule.js' 中): (function (global, factory) { typeof exports === 'objec
我包含了一个需要 JQuery 2.2 的旧库,但我希望其他所有内容都使用最新版本的 JQuery。有问题的库混合使用 UMD(我认为),所以代码看起来像这样...... (function ($)
我正在定义一个 UMD 风格的模块,定义一个可以跨 CommonJS、AMD 和浏览器全局变量使用的模块,如下所示: (function (root, factory) { if (typeo
我正在创建我的第一个用于开源分发的 AngularJS 模块。我想以其他人易于使用的方式打包它。 UMD 项目提供了一个 pattern用于导出与 AMD、CommonJS(或至少 Node)和浏览器
我的设置 我正在将我的 .ts 模块“FooModule”编译成 UMD module在 Visual Studio 2015 中。我想扩展此 UMD 语法,以便在不存在模块加载系统时将模块作为后备注
我想将我的 React 组件打包为 umd lib。 下面是我的 webpack 设置: module.exports = { devtool: 'eval', entry: [ '.
我刚刚从 2.0.0-rc2 的 Angular QuickStart 跃进,并更新了 system-config.ts 文件来下载 rxjs 的 umd 文件,即 rxjs\bundles\Rx.u
我正在开发一个 javascript 库,它使用闭包编译器来组合/缩小和类型检查。为了避免噘嘴全局命名空间,我想使用 UMD 模式 & closue @export(or goog.exportSym
您好,我正在研究 RxJS。我可以通过在我的浏览器中引用它来简单地使用这个库: 它使用“Rx”的全局对象命名空间变量导入。我可以制作可观察对象并做所有有趣的事情。 当我将 src 更改为指向最新的
我已经安装了 three@^0.103.0,它有自己的类型定义。 在我项目的 src/global.d.ts 中我有: import * as _THREE from 'three' declare
我使用 browserify standalone option在以下 gulp 任务中生成一个 UMD 模块: gulp.task("bundle-source", function () {
我正在 .NET 4.0.30319.18444 上使用 IronPython 2.7.0.40 编写一些代码。在 IronPython 控制台中,如果我对我的模块进行任何更改,它们将不会生效(除非我
我在重写此代码以使其在“严格”模式下工作时遇到问题。由于“this”没有明确定义,我在编译时遇到 jshint 错误。我认为我的大脑没有足够的抽象思维来找到创造性的解决方案。任何帮助,将不胜感激。代码
我是 UMD 和 AMD 新手。我在 Browserify 中编写了一个 JS 库,并且刚刚接触到 UMD。我的理解是,如果我为每个模块都包含一段代码,我的模块应该能够在 CommonJs 和 AMD
我正在尝试加载 gridstack通过 ember-cli 在我的 Ember 应用程序中。我通过 bower 安装应用程序并导入到我的 ember-cli-build.js 文件中。它通过以下方式将
在像下面这样的简单 UMD 设置中,root 和 factory 在哪里/如何定义? (function (root, factory) { // environment detection
我正在尝试找出使用 UMD 工厂测试 Javascript 模块定义的最佳方法,类似于:https://github.com/umdjs/umd/blob/master/returnExportsGl
我是一名优秀的程序员,十分优秀!