fex-team / fis3-packager-map

A packager plugin for fis to pack resources.
BSD 2-Clause "Simplified" License
7 stars 7 forks source link

不支持合并js中的多个__uri资源 #10

Open zxkane opened 8 years ago

zxkane commented 8 years ago

在js文件中通过__uri()查找到依赖的js/css的路径,

    {
      name : 'video.js',
      module : false,
      files :
        [ __uri('../bower_components/video.js/dist/video-js.min.css'),
          __uri('../bower_components/video.js/dist/video.min.js'),
          __uri('../bower_components/video.js/dist/lang/zh-CN.js'),
          __uri('../bower_components/videojs-resolution-switcher/lib/videojs-resolution-switcher.css'),
          __uri('../bower_components/videojs-resolution-switcher/lib/videojs-resolution-switcher.js'),
        ]
    },

fis-config中将css/js打包为一个文件,并且忽略部署被合并的这些文件。

fis.match('/bower_components/{video.js,videojs-resolution-switcher}/**/{video.min,zh-CN,videojs-resolution-switcher}.js', {
  packTo: '/libs/videojs.js',
  release: ''
})
.match('/bower_components/{video.js,videojs-resolution-switcher}/**/{video-js.min,videojs-resolution-switcher}.css', {
  packTo: '/assets/styles/videojs.css',
  release: ''
})
.match('*', {
  deploy: [
    fis.plugin('skip-packed'),
    fis.plugin('local-deliver', {
      to: fis.project.getTempPath('www')
    })
  ]
})

然而部署后的js文件中,__uri()查找的资源并没有指向合并后的文件。

    {
      name : 'video.js',
      module : false,
      files :
        [ '/bower_components/video.js/dist/video-js.min.css',
          '/bower_components/video.js/dist/video.min.js',
          '/bower_components/video.js/dist/lang/zh-CN.js',
          '/bower_components/videojs-resolution-switcher/lib/videojs-resolution-switcher.css',
          '/bower_components/videojs-resolution-switcher/lib/videojs-resolution-switcher.js',
        ]
    },
2betop commented 8 years ago

目前还不支持这种用法,看你要实现什么功能,也许还有其他的方式

zxkane commented 8 years ago

项目用到了videojs和它的一系列插件。开发流程中是通过bower安装管理的。因为项目是页面按需加载的第三方库(加载页面时按配置中路径加载必要的js),所以videojs和它的插件路径都被写到了配置文件(js文件)。BTW,如果这些文件直接被html所引用,最终fis3部署后html的路径会指向合并后的文件。

我希望部署的时候把video相关的js/css合并为一个单独的文件来加速加载。这时就遇到这个issue。如果有其他workaround,还望赐教。

2betop commented 8 years ago

目标文件是可以模块化的吗?如果是那就好办了。直接通过异步的 require 去加载。

zxkane commented 8 years ago

配置js是静态的。被html所包含。由于用的框架原因,也不是用的require按需加载库。

2betop commented 8 years ago

相当于还得自创一个模块化管理方案,成本很大,何不改成 require 的方式, commonjs/amd 方式都行

zxkane commented 8 years ago

项目用的angularjsoclazyload来按需加载js库。oclazyload需要提前定义库的路径,所以需要使用__uri()在部署时处理文件路径。比如加hash,替换为部署到CDN后的路径。

lixiansky commented 8 years ago

同问