You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
compilation.plugin('optimize-chunks',function(chunks){//unless you specified multiple entries in your config//there's only one chunk at this pointchunks.forEach(function(chunk){//chunks have circular references to their moduleschunk.modules.forEach(function(module){//module.loaders, module.rawRequest, module.dependencies, etc.});});});
如何确定图片是被关联的
在每次执行
webpack
命令进行编译的时候,总能看到如下的输出:其中上面的绿色表示的输出的文件以及文件的一些信息,下面的显示
built
的就是所有关联的文件。所以通过这个就可以知道每一个关联的文件必然存放在
compilation
这个对象中,但是什么时候时候可以获取这些信息呢?webpack
的具体编译过程可以参考这里以及这里可以得出结论在
optimize
和optimize-tree
的时候表示webpack
已经编译完成,要想拿到chunk
信息,就需要在optimize-chunks
这个阶段进行。示例代码如下:
在最里面的回调中就可以访问每一个相关联的文件信息,把
module
中的信息打印出来所示:在这里可以获取到图片信息,比如
name
,context
,_source
如何读取关联的图片内容
因为一个项目里面可能有多个图片,而且有些图片可能并没有使用,如何将使用的文件信息读取出来
解决方式1:借鉴
ExtractTextPlugin
中的思想,就是在webpack的loader配置中就直接调用ExtractTextPlugin.extract
这个方法,但是而这个方法里面就是通过调用各种
css loader
来获取图片信息,因为每一个loader
都是一个函数,而且接受css文件的content
作为参数,这样就可以直接调用css文件的信息。但是如果自己写的插件也采取这种方式,由于css和image所调用的
loader
不一样,所以必然也存在问题,而且url-loader
和file-loader
的处理方式差异很大,所以就舍弃了这种做法
解决方式2:直接食用第一个问题中获取的
module._source
作为图片的content
,但是此时这个content
是经过loader
处理之后得到的信息url-loader
处理后,content
信息为:file-loader
处理之后,content
信息为:其中
url
为图片输出的路径针对不同的
loader
如何处理file-loader
处理时,图片已经输出,已经达到我们的目的url-loader
处理时,最后输出的是base64编码,如何将编码信息转换成图片信息(进行中)这种方式中,直接将
_source
输出会报错:这个地方花了好长时间,而且跑到相对应的
Compiler.js
对应的源码去看,也没有看出来,之后去官方文档去看发现传进去的content
格式必须如下:结果修复了
另一种获取方式(尝试中)
由于在前面中可以获取图片的
name
和context
,两者拼接就可以得到完整的绝对路径,然后使用node的fs
模块对文件进行读取和创建即可小结:多看官方文档,多看源码
The text was updated successfully, but these errors were encountered: