【问题标题】:Creating libraries with JavaScript - ES 6使用 JavaScript 创建库 - ES 6
【发布时间】:2015-11-25 14:15:00
【问题描述】:

我正在使用 Node 和 ES6 构建应用程序。这个应用程序有一个我想跨项目使用的库。为了这个问题,库的目录结构如下所示:

lib
  logging
    logManager.js
    logEntry.js
  security
    user.js
    role.js

我的实际结构不同。我选择了loggingsecurity 让问题更容易理解。不过,我的代码目前看起来像这样:

logManager.js

'use strict';

var User = require('../security/user.js');
class LogManager {
  constructor(props) {
    this.user = props.user;
  }
}
module.exports LogManager;

logEntry.js

'use strict';
class LogEntry {
  constructor(props) {
  }
}
module.exports LogEntry;

user.js

'use strict';
class User {
  constructor(props) {
  }
}
module.exports User;

role.js

'use strict';
class Role {
  constructor(props) {
  }
}
module.exports Role;

我的思维定势可能是面向对象的 Java / C# 世界。但是,我试图弄清楚如何将这四个文件打包成一个我可以分发的文件。为了尝试做到这一点,我添加了一个如下所示的 gulp 任务:

gulp.task('package', function() {
    return gulp.src(input.js)
        .pipe(jshint())
        .pipe(jshint.reporter('default'))       
        .pipe(babel())
        .pipe(concat(output.js))
        .pipe(gulp.dest('dist'));
    ;    
});

此任务将所有四个文件放入一个名为dist/library.js 的文件中。但是,我有几个问题。首先,JSHint 抱怨在我的每个文件中都使用了 strict。因此,我删除了“使用严格”行只是为了尝试前进并通过 JSHint(我不想这样做)。但我觉得我真的有些不合时宜,因为当连接发生时,logManager.js 中的 require 语句会中断。

感觉一切都作为单独的组件工作。但是,当我尝试将它们完全捆绑到 library.js 中时,它会中断。我错过了什么?

【问题讨论】:

标签: javascript gulp ecmascript-6


【解决方案1】:

您的模块导出中有语法错误。

// this is wrong syntax (missing "=")
module.exports LogManager;

由于你已经使用 babel,你可以切换 ES6 模块

// default export of module (ES6 syntax)
export default LogManager;

// importing modules (ES6 syntax)
import User from 'security/user';

【讨论】:

  • 那么,您是否建议我在 myLibrary.js 中从 'security/user' 导入用户?
  • Yury Tarabanko 评论说您的导出语法错误。您可以修复它并使用 commonJS 模块或使用 ES6 模块语法
猜你喜欢
  • 1970-01-01
  • 2014-07-06
  • 2019-09-21
  • 2016-12-22
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 2016-10-07
相关资源
最近更新 更多