AOT 和 Roll-Up:只有捆绑包 main.js,没有其他
AOT & Roll-Up: Only bundles main.js and nothing else
我正在尝试根据 https://angular.io/docs/ts/latest/cookbook/aot-compiler.html#!#tree-shaking
实施 AOT 和 Rollup
I 运行 rollup per:"node_modules/.bin/rollup" -c scripts/rollup-config.js
结果是一个 build.js 文件,只有入口文件,没有其他内容。没有错误,只有一个警告:“'default' 是从外部模块 'rollup' 导入的,但从未使用过”
"aot" 文件夹确实包含所有相关的已编译 ngfactory 文件。
入口文件如下:
import { platformBrowser } from '@angular/platform-browser';
import { AppModuleNgFactory } from '../aot/app/app.module.ngfactory';
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
汇总-js.config:
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: 'scripts/app/main.js',
dest: 'scripts/app/build.js', // output a single application bundle
sourceMap: true,
sourceMapFile: 'scripts/app/build.js.map',
format: 'iife',
onwarn: function(warning) {
// Skip certain warnings
// should intercept ... but doesn't in some rollup versions
if ( warning.code === 'THIS_IS_UNDEFINED' ) { return; }
// intercepts in some rollup versions
if ( warning.indexOf("The 'this' keyword is equivalent to 'undefined'") > -1 ) { return; }
// console.warn everything else
console.warn( warning.message );
},
plugins: [
nodeResolve({jsnext: true, module: true}),
commonjs({
include: '../node_modules/rxjs/**'
}),
uglify()
]
}
和我的 systemjs 以防其相关:
(function (global) {
System.config({
paths: {
// paths serve as alias
'npm:': 'libs/'
},
// map tells the System loader where to look for things
map: {
// our app is within the app folder
app: 'approot',
appjit: 'approot',
// angular bundles
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
'@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
'@angular/http': 'npm:@angular/http/bundles/http.umd.js',
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
// other libraries
'rxjs': 'npm:rxjs',
'angular-in-memory-web-api': 'npm:angular-in-memory-web-api',
'jquery': 'npm:jquery/dist/jquery.min.js',
'moment': 'npm:moment/moment.js',
'ng2-bootstrap/ng2-bootstrap': 'npm:ng2-bootstrap/bundles/ng2-bootstrap.umd.js',
'ng2-select/ng2-select': 'npm:ng2-select/ng2-select.js',
"ng2-popover": "libs/ng2-popover",
'angular2-ui-switch': 'libs/angular2-ui-switch/dist/index.js',
"angular2-text-mask": "libs/angular2-text-mask/dist",
"text-mask-core": "libs/text-mask-core/"
},
// packages tells the System loader how to load when no filename and/or no extension
packages: {
app: {
main: './app/main.js',
defaultExtension: 'js'
},
appjit: {
main: './app/main-jit.js',
defaultExtension: 'js'
},
rxjs: {
defaultExtension: 'js'
},
'angular-in-memory-web-api': {
main: './index.js',
defaultExtension: 'js'
},
'libs/ng2-select': {
defaultExtension: 'js'
},
'libs/ng2-popover': {
main: "index.js",
defaultExtension: 'js'
},
'libs/angular2-text-mask/dist': {
main: "angular2TextMask.js",
defaultExtension: 'js'
},
'libs/text-mask-core/': {
main: "textMaskCore.js",
defaultExtension: 'js'
},
'libs/angular2-ui-switch': {
main: "index.js",
defaultExtension: 'js'
}
}
});
})(this);
我的文件夹结构如下:
- [visual studio 项目]/scripts/aot
- [visual studio 项目]/scripts/app
- [visual studio项目]/scripts/app/main.js
- [visual studio 项目]/scripts/rollup-config.js
- [visual studio 项目]/scripts/tsconfig-aot.json
我的环境:
- 对比 2015
- Angular: 2.4.0
- 节点:v5.5.0
- 打字稿:2.0.10
- 汇总:0.41.4
- rollup-plugin-node-resolve: 2.0.0
- rollup-plugin-commonjs: 7.0.0
- rollup-plugin-uglify: 1.0.1
要使 AOT 正常工作,您需要确保生成的是 es6 模块加载语法:
Rollup 只能使用具有导入和导出语句的 Tree Shake ES2015 模块。
tsconfig.json:
{
"compilerOptions" {
"module": "es6",
...
}
}
我也在关注官方的 angular2 AOT guilde myself and due to lack of a simple working example I have created this github repository。希望对你有帮助。
如果您是 windows 用户,您绝对应该能够在 git-bash 终端中使用它(由我测试)。
在您的 [visual studio 项目]/scripts/aot 文件夹中,应该有一个 main.ts 文件,visual studio 将使用 t[ 将其编译为 main.js =19=]sconfig.json 但不是 tsconfig-aot.json,检查你的 main.js 文件,如果它看起来像
"use strict";
var platform_browser_1 = require("@angular/platform-browser");
var app_module_ngfactory_1 = require("./app.module.ngfactory");
platform_browser_1.platformBrowser().bootstrapModuleFactory(app_module_ngfactory_1.AppModuleNgFactory);
您需要更新 tsconfig.json:
{
"module": "commonjs",
}
至
{
"module": "es2015",
}
我正在尝试根据 https://angular.io/docs/ts/latest/cookbook/aot-compiler.html#!#tree-shaking
实施 AOT 和 RollupI 运行 rollup per:"node_modules/.bin/rollup" -c scripts/rollup-config.js
结果是一个 build.js 文件,只有入口文件,没有其他内容。没有错误,只有一个警告:“'default' 是从外部模块 'rollup' 导入的,但从未使用过”
"aot" 文件夹确实包含所有相关的已编译 ngfactory 文件。
入口文件如下:
import { platformBrowser } from '@angular/platform-browser';
import { AppModuleNgFactory } from '../aot/app/app.module.ngfactory';
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
汇总-js.config:
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: 'scripts/app/main.js',
dest: 'scripts/app/build.js', // output a single application bundle
sourceMap: true,
sourceMapFile: 'scripts/app/build.js.map',
format: 'iife',
onwarn: function(warning) {
// Skip certain warnings
// should intercept ... but doesn't in some rollup versions
if ( warning.code === 'THIS_IS_UNDEFINED' ) { return; }
// intercepts in some rollup versions
if ( warning.indexOf("The 'this' keyword is equivalent to 'undefined'") > -1 ) { return; }
// console.warn everything else
console.warn( warning.message );
},
plugins: [
nodeResolve({jsnext: true, module: true}),
commonjs({
include: '../node_modules/rxjs/**'
}),
uglify()
]
}
和我的 systemjs 以防其相关:
(function (global) {
System.config({
paths: {
// paths serve as alias
'npm:': 'libs/'
},
// map tells the System loader where to look for things
map: {
// our app is within the app folder
app: 'approot',
appjit: 'approot',
// angular bundles
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
'@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
'@angular/http': 'npm:@angular/http/bundles/http.umd.js',
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
// other libraries
'rxjs': 'npm:rxjs',
'angular-in-memory-web-api': 'npm:angular-in-memory-web-api',
'jquery': 'npm:jquery/dist/jquery.min.js',
'moment': 'npm:moment/moment.js',
'ng2-bootstrap/ng2-bootstrap': 'npm:ng2-bootstrap/bundles/ng2-bootstrap.umd.js',
'ng2-select/ng2-select': 'npm:ng2-select/ng2-select.js',
"ng2-popover": "libs/ng2-popover",
'angular2-ui-switch': 'libs/angular2-ui-switch/dist/index.js',
"angular2-text-mask": "libs/angular2-text-mask/dist",
"text-mask-core": "libs/text-mask-core/"
},
// packages tells the System loader how to load when no filename and/or no extension
packages: {
app: {
main: './app/main.js',
defaultExtension: 'js'
},
appjit: {
main: './app/main-jit.js',
defaultExtension: 'js'
},
rxjs: {
defaultExtension: 'js'
},
'angular-in-memory-web-api': {
main: './index.js',
defaultExtension: 'js'
},
'libs/ng2-select': {
defaultExtension: 'js'
},
'libs/ng2-popover': {
main: "index.js",
defaultExtension: 'js'
},
'libs/angular2-text-mask/dist': {
main: "angular2TextMask.js",
defaultExtension: 'js'
},
'libs/text-mask-core/': {
main: "textMaskCore.js",
defaultExtension: 'js'
},
'libs/angular2-ui-switch': {
main: "index.js",
defaultExtension: 'js'
}
}
});
})(this);
我的文件夹结构如下:
- [visual studio 项目]/scripts/aot
- [visual studio 项目]/scripts/app
- [visual studio项目]/scripts/app/main.js
- [visual studio 项目]/scripts/rollup-config.js
- [visual studio 项目]/scripts/tsconfig-aot.json
我的环境:
- 对比 2015
- Angular: 2.4.0
- 节点:v5.5.0
- 打字稿:2.0.10
- 汇总:0.41.4
- rollup-plugin-node-resolve: 2.0.0
- rollup-plugin-commonjs: 7.0.0
- rollup-plugin-uglify: 1.0.1
要使 AOT 正常工作,您需要确保生成的是 es6 模块加载语法:
Rollup 只能使用具有导入和导出语句的 Tree Shake ES2015 模块。
tsconfig.json:
{
"compilerOptions" {
"module": "es6",
...
}
}
我也在关注官方的 angular2 AOT guilde myself and due to lack of a simple working example I have created this github repository。希望对你有帮助。
如果您是 windows 用户,您绝对应该能够在 git-bash 终端中使用它(由我测试)。
在您的 [visual studio 项目]/scripts/aot 文件夹中,应该有一个 main.ts 文件,visual studio 将使用 t[ 将其编译为 main.js =19=]sconfig.json 但不是 tsconfig-aot.json,检查你的 main.js 文件,如果它看起来像
"use strict";
var platform_browser_1 = require("@angular/platform-browser");
var app_module_ngfactory_1 = require("./app.module.ngfactory");
platform_browser_1.platformBrowser().bootstrapModuleFactory(app_module_ngfactory_1.AppModuleNgFactory);
您需要更新 tsconfig.json:
{
"module": "commonjs",
}
至
{
"module": "es2015",
}