javascript - 在串联期间如何管理依赖关系?

标签 javascript gruntjs

到目前为止,我一直将所有 JS 文件附加在一起并一次加载它们,效果很好。我一直在使用咕噜声来加载它们。但是,我注意到一件事是订单很重要。如果我有一个继承链,例如 Entity => Character => Player,我需要先加载 Entity.js。

如何控制附加顺序和管理依赖项?或者这是 RequireJS 的工作?

最佳答案

使用模块打包器,例如 Browserify , WebpackRequireJS .

使用 browserify/webpack(或 commonjs 加载器和 requirejs):

player.js

var Character = require('./character')
function Player() { Character.call(this) }
inherits(Player, Character)
module.exports = Player

character.js

var Entity = require('./entity')
function Character() { Entity.call(this) }
inherits(Character, Entity)
module.exports = Character

entity.js

function Entity() {}
module.exports = Entity

app.js

var Player = require('./player')
var player = new Player()

或者如果您更喜欢 AMD 和 requirejs(或使用 Browserify/webpack AMD 转换):

player.js

define(['./character'], function(Character) {
  function Player() { Character.call(this) }
  inherits(Player, Character)
  return Player
})

character.js

define(['./entity'], function(Entity) {
  function Character() { Entity.call(this) }
  inherits(Character, Entity)
  return Character
})

entity.js

define(function() {
  function Entity() {}
  return Entity
})

app.js

require(['./player'], function(Player) {
  var player = new Player()
})

这里值得注意的是 webpack 可以同时加载同步和异步模块:var sync = require('./sync')require (['./async'], function(async) {})

同时将 inherits 替换为您喜欢的任何原型(prototype)继承方法。我更喜欢 node.js 的:http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructorhttps://npmjs.org/package/inherits


ES6,javascript 的下一个版本,有一个模块语法规范。所以在未来的某个时候,适当的模块加载将内置到语言中。它可能看起来像这样:

import Character from "character"
function Player() { Character.call(this) }
inherits(Player, Character)
export default = Player

也有用于 webpack 和 requirejs 的加载器以这种语法加载模块:ES6 Module Transpiler (不推荐使用 BabelEsperanto )和 es6-loader (已弃用,取而代之的是 babel-loader)。

编辑:es6ify现在支持与 browserify 一起使用的 es6 模块语法。


在我看来,连接模块已经过时了。使用模块 bundler 并打开通往它们提供的许多美妙事物的大门。

关于javascript - 在串联期间如何管理依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21486460/

相关文章:

javascript - AngularJS 中 $scope.myScope = function() 和 function() 有什么区别

javascript - 内部HTML类

javascript - Grunt 运行并完成 "watch"任务后非常慢

javascript - 如何使用 grunt-contrib-jasmine 工作 jasmine-ajax

javascript - AJAX POST 不适用于 jQuery 1.9.0 或更高版本

javascript - 如何在不使用全局变量的情况下使数据随时可供多个 Javascript 函数使用?

javascript - 使用 RegEx 验证负十进制数和正十进制数

npm - 克隆/ check out git 项目的 Grunt 任务

node.js - 如何让 Grunt Deploy 使用全局 NPM 模块而不是本地模块

node.js - Grunt 不返回任何内容