我花了一刀一个,而做AOT具有角4,始终得到这个错误: 未捕获的ReferenceError:要求没有定义angular4 AOT掷要求是没有定义的错误
我,因为我使用jquery得到这个错误在我的应用程序,并在应用程序中,我有这样的代码:
var jQuery = require('jquery');
jQuery("xxxx").val()
如果我删除此,整个AOT工作就像一个魅力。
我tsconfig-aot.json:
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"lib": ["es5", "dom"],
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true
},
"files": [
"src/app/app.module.ts",
"src/main.ts"
],
"angularCompilerOptions": {
"genDir": "aot",
"skipMetadataEmit" : true
}
}
我的汇总配置:
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: 'src/main.js',
dest: 'public/build.js', // output a single application bundle
sourceMap: false,
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/**','node_modules/jquery/**']
}),
uglify()
]
}
这是否意味着,如果你使用的需要()你NG4内部应用程序,则AOT不会工作?
感谢并希望听到您的建议。
我试图用这个: import *作为jQuery从'jquery'; 然后它按要求工作,并在JIT模式下,它工作正常。而且,ngc包也很好。但是当我使用卷起来,在出把有此错误:
Cannot call a namespace ('jQuery')
src/app/app.component.js (14:8)
12: }
13: AppComponent.prototype.ngOnInit = function() {
14: jQuery('h1').html('New Content');
^
15: };
16: return AppComponent;
这是更新的代码:
import * as jQuery from 'jquery';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./scss/app.component.scss']
})
export class AppComponent implements OnInit{
ngOnInit(){
jQuery('h1').html('New Content');
}
}
任何想法?
你不应该用'--module es2015'来使用'require',否则会导致TypeScript编译错误。它没有的唯一原因是你正在使用'var..require'形式而不是正确的,在TypeScript中,'import..require'形式。尽管如此,前面提到的原因仍然不正确。尝试从'jquery'导入jQuery;如果在运行时抛出jQuery没有定义,请尝试从'jquery'导入*作为jQuery;' –