componentjs / builder2.js

builder for component
50 stars 20 forks source link

Adding URL rewriting for scripts #64

Closed dominicbarnes closed 10 years ago

dominicbarnes commented 10 years ago

I've been looking for a way for scripts to have access to the relative path for a given asset file. Right now, using things like clipboard-dom require you to set a path manually, and that means needing to keep up the source changes with version changes.

This change adds support for replacing a specific pattern with the url that would also be used for CSS url-rewriting. For example:

var path = /* component:file */ "asset.ext";
// becomes
var path = "user/component/version/asset.ext";

The asset path is resolved relative to the file it is found in. Also, the asset does not have to be in the component.json (at least we are not checking on that at this time)

For plugin authors that require some sort of URL for finding an asset via AJAX, they will still need to expose some sort of hook for developers/users to set the URL specific. (since JS has no notion of relative URLs like CSS does) However, this should make the end-result far more robust. For example:

var Clip = require("clipboard-dom");

// this
Clip.swf("/public/component/clipboard-dom/v0.0.5/ZeroClipboard.swf");
// would now be
Clip.swf("/public/" + Clip.swf());
// where Clip.swf() returns the URL rewritten by the builder

I've pushed a branch to clipboard-dom demonstrating this change. For non-component developers, nothing changes and this remains backwards compatible.

jonathanong commented 10 years ago

LGTM