无法读取 gulp-browserify 中未定义的属性“发射”

Posted

技术标签:

【中文标题】无法读取 gulp-browserify 中未定义的属性“发射”【英文标题】:Cannot read property 'emit' of undefined in gulp-browserify 【发布时间】:2015-09-11 23:12:30 【问题描述】:

我遇到了问题。我已经创建了自己的种子:https://github.com/damirkusar/leptir-angular-seed,使用 gulp、browserify 等。

一切正常,因为我有一个好主意将节点从 10.32 更新到 12.5,我收到以下错误。我想这是从那时起。我也在另一台机器上试过,同样的设置,同样的错误。

所以,在 npm install 和 bower install 之后,我正在启动应用程序:

gulp

或者在尝试构建项目时

gulp build

我收到此错误:

leptir-angular-seed/node_modules/gulp-browserify/node_modules/browserify/node_modules/module-deps/index.js:162
rs.on('error', function (err)  tr.emit('error', err) );
                                  ^
TypeError: Cannot read property 'emit' of undefined
at ReadStream.<anonymous> (/leptir-angular-seed/node_modules/gulp-browserify/node_modules/browserify/node_modules/module-deps/index.js:162:39)
at ReadStream.emit (events.js:107:17)
at fs.js:1618:12
at FSReqWrap.oncomplete (fs.js:95:15)

这里也是 package.json 的链接:https://github.com/damirkusar/leptir-angular-seed/blob/450ffe99943036cd5a670e54ec3884c02bd7bb8a/package.json。

但幸运的是,karma start 执行了测试并且所有测试都通过了..

也许有些版本没有得到正确的支持? 有谁知道是什么导致了这个问题?

-- 编辑 2015-June-25 14:23

我正在使用导致我的 gulp 文件出现问题的模块,如下所示:

// Browserify task
gulp.task('browserify', function () 
gulp.src(paths.browserify[0])
    .pipe(browserify(
        insertGlobals: true,
        debug: true
    ))
    // Bundle to a single file
    .pipe(concat('bower.js'))
    // Output it to our dist folder
    .pipe(gulp.dest(paths.destination_public))
    .pipe(refresh(lrServer)); // Tell the lrServer to refresh;

gulp.src(paths.browserify[1])
    .pipe(browserify(
        insertGlobals: true,
        debug: true
    ))
    // Bundle to a single file
    .pipe(concat('app.js'))
    // Output it to our dist folder
    .pipe(gulp.dest(paths.destination_public))
    .pipe(refresh(lrServer)); // Tell the lrServer to refresh;
);

哪些浏览器会化这些 app.js 文件及其内容:

require('./modules/core');
require('./modules/core');

和 bower.js 及其内容:

'use strict';

require('jquery');
require('bootstrap');
require('moment');
require('underscore');
require('angular');
require('angular-animate');
require('angular-bootstrap');
require('angular-bootstrap-tpls');
require('angular-cookies');
require('angular-mocks');
require('angular-resource');
require('angular-ui-router');
require('angular-ui-utils');
require('angular-translate');
require('angular-translate-loader-static-files');
require('angular-translate-loader-url');
require('angular-translate-storage-cookie');
require('angular-translate-storage-local');

非常感谢

【问题讨论】:

tr 应该是什么?该错误通常意味着您的代码中存在语法或语义错误。 hmm.. 我不知道 tr 应该是什么.. 它在浏览器模块中的猜测.. 它不是我的代码.. 我没有这样的代码.. 可能有gulp-browserify 依赖的 browserify 模块出错? 我很确定,这会导致错误。但我必须看到更多的代码来帮助你。我现在应该,tr 应该是什么...... 我所有的代码都在这里:github.com/damirkusar/leptir-angular-seed 项目太复杂,看不到相关代码。请列出相关文件或将其代码(仅相关部分)添加到您的问题中。 【参考方案1】:

"...but in fact, otherwise i am not using this module which causes the error." - 达米尔

modules 也有依赖关系。其他模块使用的这些模块之一似乎有问题。

您正在使用的模块可能依赖于旧版本的节点组件。尝试恢复旧版本,直到错误修复。

【讨论】:

嗨 Marcel,我将我的节点降级到 10.32,我的 npm 降级到 1.4.28,还将一些关于旧提交的包移动到旧版本,但仍然存在同样的问题.. 如果我要求不高,你可以克隆 repo,安装节点包和 bower 并使用命令 gulp 运行应用程序吗?只是看看它是否在你的机器上工作? :) 如果是,那么我的机器上有些问题。如果不是,那我就不知道了【参考方案2】:

在 Windows 机器上(而不是我的 mac)它向我显示了更好的错误消息。

我引用了未安装的 bower 包。但完全忘记将其从 package.json 和 bower.js 中删除。

所以我删除了上述文件中引用以下包的代码:

角度翻译存储cookie 角度翻译存储本地

-- 2015 年 6 月 27 日更新 - 22:41 --

我看到 gulp-browserify 被 gulpjs 列入黑名单,所以我认为最好摆脱它,因为我在 windows 机器上也遇到了问题。我没有使用 gulp-browserify,而是使用带有乙烯基变换的普通 browserify。

首先,用这个更新你的 package.json:

"browserify": "9.0.4",
"vinyl-transform": "1.0.0"

你看,我正在使用这两个版本,这是因为对于较新的 browserify 版本,事情并没有真正起作用,所以为了确保它在我更新我的包时也能正常工作,我将它们保留在这个版本中。

然后让我们更新我们的 gulp 文件。我们需要添加这两行:

var browserify = require('browserify'),
transform = require('vinyl-transform');

我的新任务如下所示:

gulp.task('browserify', function () 
  var browserified = transform(function(filename) 
    var b = browserify(filename);
    return b.bundle();
  );

  return gulp.src(paths.browserify)
    .pipe(browserified)
    .pipe(gulp.dest(paths.destination_public));
);

它现在更短,更干净。我的路径是这样配置的..

var paths = 
    ...
    browserify: ['./public/bower.js', './public/app.js'],
    ...
    destination_public: './dist/'
;

现在我的种子在 mac 和 windows 上的工作方式相同。 https://github.com/damirkusar/leptir-angular-seed

【讨论】:

以上是关于无法读取 gulp-browserify 中未定义的属性“发射”的主要内容,如果未能解决你的问题,请参考以下文章

如何修复'TypeError:无法读取 Javascript 中未定义的属性'标题'

无法读取主干中未定义的属性“长度”

无法读取 Nodejs 中未定义的属性

TypeError:无法读取reactjs中未定义的属性“长度”

TypeError:无法读取 Apollo 中未定义的属性“fetchMore”

TypeError:无法读取 Vue 中未定义的属性“id”