资产的“导入”依赖解决方案

时间:2013-02-18 11:46:15

标签: javascript symfony import dependencies assetic

我正在寻找一些使用@import'* .js'的解决方案,就像在Symfony 2项目的较少css中一样。 那有插件吗?在文件中控制而不是在树枝上以正确的顺序写'javascripts'会很好。

如果我不清楚:

今天我们必须控制加载顺序以确保超类的预定义:

{% javascripts '@AcmeDemoBundle/Resources/public/js/app.base.js'
               '@AcmeDemoBundle/Resources/public/js/app.inheritancelevel1.js'
               '@AcmeDemoBundle/Resources/public/js/app.inheritancelevel2.js'
               '@AcmeDemoBundle/Resources/public/js/app.inheritancelevel3.js'
               '@AcmeDemoBundle/Resources/public/js/app.starter.js'
%}...

我想要的是什么:

{% javascripts '@AcmeDemoBundle/Resources/public/js/app.starter.js' %}...

//.../app.starter.js
@import 'app.baseclasses1.js'
@import 'app.baseclasses2.js'
@import 'app.baseclassesN.js'
//.../app.baseclassesX.js
@import 'app.superbaseclassesX.js'
// an so on...

我所知道的唯一解决方案是将定义包装到函数中并实现很少的实用程序:

loadUtil.register('some.package', function(){ 
loadUtil.import('some.base.package');
MyClass=new Class({extends: SuperClassFromSomeBasePackage...});
});

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

以CommonJS格式编写JavaScript模块并使用cjsDeliveryBundle

假设您的客户端应用程序包含两个模块,pear和pip,其中pip需要pear。 pip.js看起来像这样:

// pip.js
exports.message = 'I am a pip.';

而pear.js看起来像这样:

// pear.js
var pip = require('./pip'); // Assuming pip.js is in the same directory. Note that the .js extension is omitted in CommonJS.

console.log('I am a pear, but also, ' + pip.message);

如果您将其指向pear.js,cjsDelivery将自动解析依赖关系并将整个模块化应用程序编译为单个JavaScript文件。