Require()使用gulp angular browserify返回空对象

require() returning empty object with gulp angular browserify

本文关键字:browserify 返回 对象 angular gulp 使用 Require      更新时间:2023-09-26

我遇到了一个问题,我正在使用gulp构建我的项目,gulp在我使用bower下载的外部库上运行browserify任务(带有debowerify)。其中一个库——angular-gridster——已经更新为使用UMD模式,现在它抛出一个错误,对angular的引用是一个空对象。

angular-gridster.js文件是这样开始的:

(function(root, factory) {
    'use strict';
    if (typeof define === 'function' && define.amd) {
        // AMD
        define(['angular'], factory);
    } else if (typeof exports === 'object') {
        // CommonJS
        module.exports = factory(require('angular'));
    } else {
        // Browser, nothing "exported". Only registered as a module with angular.
        factory(root.angular);
    }
}(this, function(angular) {
'use strict';
// This is throwing my error
return angular.module('gridster', [])

,当它试图调用angular.module()时,它会抛出错误'angular '。模块不是一个函数。在调试时,我可以看到angular只是一个空对象,没有正确加载。我不确定这是否是require()方法或gulp或browserify或debowerify的问题…

这是我的gulp任务

gulp.task('dependencies', function() {
gulp.src(paths.dependencies)
    .pipe(browserify({
        insertGlobals: true,
        debug: true,
        transform: ['debowerify']
    }).on('error', gutil.log))
    .pipe(concat('3rdparty.js'))
    .pipe(gulp.dest('www/js'));

});

任何想法?谢谢!

我设法解决了这个问题,这只是调用require()函数,然后将现在的全局变量angular传递给factory()方法。

if (typeof define === 'function' && define.amd) {
    // AMD
    define(['angular'], factory);
} else if (typeof exports === 'object') {
    // CommonJS
    require('angular');
    module.exports = factory(angular);
} else {
    // Browser, nothing "exported". Only registered as a module with angular.
    factory(root.angular);
}