Minify URLs by converting them from absolute to relative.
If you were to use this library on a website like http://example.com/dir1/dir1-1/
, you would get results such as:
Before | After |
---|---|
http://example.com/dir1/dir1-2/index.html |
../dir1-2/ |
http://example.com/dir2/dir2-1/ |
/dir2/dir2-1/ |
http://example.com/dir1/dir1-1/ |
|
https://example.com/dir1/dir1-1/ |
https://example.com/dir1/dir1-1/ |
http://google.com:80/dir/ |
//google.com/dir/ |
../../../../../../../../#anchor |
/#anchor |
All string parsing. No directory browsing. It is thoroughly tested, very fast and lightweight with zero external dependencies.
This utility requires Node.js >= 0.10
. To install, type this at the command line:
npm install relateurl --save-dev
Type: Object
Default value: {ftp:21, http:80, https:443}
Extend the list with any ports you need. Any URLs containing these default ports will have them removed. Example: http://example.com:80/
will become http://example.com/
.
Type: Array
Default value: ["index.html"]
Extend the list with any resources you need. Works with options.removeDirectoryIndexes
.
Type: Boolean
Default value: false
This will, for example, consider any domains containing http://www.example.com/
to be related to any that contain http://example.com/
.
Type: constant or String
Choices: RelateUrl.ABSOLUTE
,RelateUrl.PATH_RELATIVE
,RelateUrl.ROOT_RELATIVE
,RelateUrl.SHORTEST
Choices: "absolute"
,"pathRelative"
,"rootRelative"
,"shortest"
Default value: RelateUrl.SHORTEST
RelateUrl.ABSOLUTE
will produce an absolute URL. Overrides options.schemeRelative
with a value of false
.
RelateUrl.PATH_RELATIVE
will produce something like ../child-of-parent/etc/
.
RelateUrl.ROOT_RELATIVE
will produce something like /child-of-root/etc/
.
RelateUrl.SHORTEST
will choose whichever is shortest between root- and path-relative.
Type: Array
Default value: ["data","javascript","mailto"]
Extend the list with any additional schemes. Example: javascript:something
will not be modified.
Type: Boolean
Default value: false
Remove user authentication information from the output URL.
Type: Boolean
Default value: true
Remove any resources that match any found in options.directoryIndexes
.
Type: Boolean
Default value: false
Remove empty query variables. Example: http://domain.com/?var1&var2=&var3=asdf
will become http://domain.com/?var3=adsf
. This does not apply to unrelated URLs (with other protocols, auths, hosts and/or ports).
Type: Boolean
Default value: true
Remove trailing slashes from root paths. Example: http://domain.com/?var
will become http://domain.com?var
while http://domain.com/dir/?var
will not be modified.
Type: Boolean
Default value: true
Output URLs relative to the scheme. Example: http://example.com/
will become //example.com/
.
Type: String
Default value: undefined
An options-based version of the from
argument. If both are specified, from
takes priority.
Type: Boolean
Default value: true
Passed to Node's url.parse
.
This library can be used as a function for single-use or as a class for multiple conversions.
Upon successful conversion, a String
will be returned. If an issue is encountered while parsing from
, an error will be thrown.
var RelateUrl = require("relateurl");
var result = RelateUrl.relate(from, to, options);
var RelateUrl = require("relateurl");
var instance = new RelateUrl(from, options);
var result1 = instance.relate(to1);
var result2 = instance.relate(to2, customOptions);
var result3 = instance.relate(to3);
Why bother writing/using this?
To aid in further minifying HTML, mainly for the purpose of faster page loads and SEO. It's been integrated into HTMLMinifier.
Why not just use Node's url.parse
, url.resolve
and path.relative
?
url.parse
is used, but url.resolve
and path.relative
are both slower and less powerful than this library.
options.removeRootTrailingSlash
options.site
options.removeEmptyQueries=true
only applied to unrelated URLstel:
options.slashesDenoteHost=false
, add something like options.externalDirectoryIndexes=[]
for external sites