Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

allInOne打包时,生成的css和js哈希值不对,导致404 #43

Open
geeyan opened this issue Mar 16, 2016 · 9 comments
Open

allInOne打包时,生成的css和js哈希值不对,导致404 #43

geeyan opened this issue Mar 16, 2016 · 9 comments

Comments

@geeyan
Copy link

geeyan commented Mar 16, 2016

页面加载的内容:
css:
image
js:
image

git status -sb 实际生成结果:
image

fis-conf.js 部分配置如下:

fis.media('clear_and_release').match('::package', {
    // 基本需要的,打包时合并
    packager: fis.plugin('map', {
        'pack/base.css': [
            '/components/bootstrap-dist/css/bootstrap.css',
            '/static/css/common/common.less',
        ],
        'pack/base.js': [
            '/static/js/common/esl.source.js',
            '/static/js/common/crypt-1.4.js',
            '/components/jquery/jquery.js',
        ],
    }),
    // 雪碧图合并
    spriter: fis.plugin('csssprites', {
        layout: 'matrix',
        margin: '10',
        scale: 0.5,
    }),
    // 打包完成后,收集并统一合并
    postpackager: fis.plugin('loader', {
        allInOne: {
            css: 'pack/aio.css',
            js: 'pack/aio.js',
            // 可忽略常用且较大文件的打包
            ignore: [
                // 这里的ignore列表,移到::package->packager里做了
                // https://github.com/fex-team/fis3-postpackager-loader/issues/36
            ],
        },
    })
});
  • 不启用clear_and_release时,解析出的html源码中资源显式加载,没有错误;
  • 当启用clear_and_release这个media的时候,就会造成合并的hash值不对,请问这里是有什么配置冲突,或者是loader收集内容时有误?应该怎么解决呢?
@geeyan
Copy link
Author

geeyan commented Mar 16, 2016

这里后来查了一下,观察生成的aio-xxx.{css,js}以及__RESOURCE_MAP__发现,是各有一个文件没有被加入到map.json里的:
image

理论上,上图两个框里依次是:
"template:page/investor/profile/mobile/edit/edit.js"
"template:page/investor/profile/mobile/edit/edit.less"

再往上找,这两个文件是会匹配到打包aio-xxx.{css,js}的:
image

@geeyan
Copy link
Author

geeyan commented Mar 16, 2016

这里延伸出一个问题:
fis3-postpackager-loader只会解析一个页面,而不是所有页面的依赖来生成不同的aio-xxx.{js/css}?
我这边是有一个view.php和一个edit.php文件的,view.php页面打包没问题,访问edit.php有上述问题。

@geeyan
Copy link
Author

geeyan commented Mar 17, 2016

大概找出原因了,是因为在pack时设置了以下配置:

allInOne: {
    css: 'pack/aio.css',
    js: 'pack/aio.js',
},

这里pack.js就取了这个参数,没有区分不同的php文件,默认pkg/${filepath}_aio.{js,css}有点粗暴

@geeyan
Copy link
Author

geeyan commented Mar 17, 2016

附上稍微优雅一点点的配置方法:

allInOne: {
    css: 'pack/aio-${hash}.css',
    js: 'pack/aio-${hash}.js',
},

看了源代码才知道可以这样玩。
@2betop 可以加到README.md里面,方便后面人参考。

@wyntau
Copy link
Contributor

wyntau commented Apr 6, 2016

@geeyan 我使用${hash}之后, 生成的js 和 css文件的hash值是一样的. 而且我修改css文件后,重新生成的hash值并没有改变, 不知道为什么

edit

看了源码, 生成的hash是根据html文件计算的, 而不是根据pack的所有文件计算的. 有没有什么办法能够根据合并的文件来生成一个hash呢

@2betop
Copy link
Contributor

2betop commented Apr 6, 2016

你给 js 和 css 加上 useHash 属性,应该就能在加一段 hash 值

@geeyan
Copy link
Author

geeyan commented Apr 6, 2016

我的配置是有前置脚本的=。=

// 所有js, css 加 hash
fis.match('*.{js,css,less}', {
    useHash: true
});

// 所有图片加 hash
fis.match('image', {
    useHash: true
});

类似生成以下css:
pack/aio-e2bd84f-ff2f203.css

@wyntau
Copy link
Contributor

wyntau commented Apr 6, 2016

感谢 @geeyan @2betop 已经设置成功

@xqkeep
Copy link

xqkeep commented Jan 5, 2017

@treri 我加上${hash},也有部分资源404的情况,你是怎么解决?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants