OverZealous / cdnizer

Node module for replacing local links with CDN links, includes fallbacks and customization
MIT License
52 stars 24 forks source link

minimatch (via ./lib/utils/findFileInfo.js) not working properly #20

Open joaocc opened 8 years ago

joaocc commented 8 years ago

I have been trying to get this to work with our project, but with no luck.

.tmp/serve/index.html

     <script src="../bower_components/angular/angular.js"></script>

cdnizer options

var cndizerOpts =
  {
    allowRev: false,
    allowMin: false,
    files: [
      'google:angular'
    ]
  };

folder structure

(root)
    packages.json
    bower.json
    .bowerrc
    gulpfile.js
    gulp
        cdnizer.js
    node_modules/
    bower_components/
    src/
        index.html    (not-injected)        
    .tmp/
        serve/
            index.html    (injected)

bower.json

{
  "dependencies": {
    "angular": "~1.4.5",

I added some console.log entries to try and troubleshoot the problem (./utils/findFileInfo()). It seems that the parsing is done correctly but minimatch says they are not matching:

in lib/util.js:findFileInfo, minimatch is called with what seem to be the right parameters, but returns null/false.

    url ===>>  "../bower_components/angular/angular.js"
    fileInfo.file ===>> "**/angular.js"

I also tried adding {dot: true} to the call to minimatch, but it still fails.

Any hints? Thx

OverZealous commented 8 years ago

Not sure about fixing the specific issue, it looks like minimatch won't match ** against ../ unless it's explicitly included in the matcher.

The only solution I can think is to override the generated pattern by using:

files: [
    {
        // or you can be explicit and use `../bower_componentes/angular/angular.js`
        file: '../**/angular.js',
        cdn: 'google:angular'
    }
]

I can't find any practical way to fix it in a generic fashion within the code. I tried, but I couldn't make minimatch optionally match a relative parent (or, actually, any relative parent).

That really blows since relative paths aren't that uncommon. I'd basically have to make a special case for relative paths, and make extra matches. I suppose I could add an extra option for prefixing generated CDN paths, but it's pretty easy to override.