责任撰写: zequninfo/
每个手机软件都尽量有一个webpack控制模块的apply方法来推行你需要要推行的编号。
两个重要的总体目标,Compiler和编译程序程序时,可以在将恶变恶性事件挂勾关系到webpack以推行该步骤时开启。
[标识:內容1]
恶变恶性事件挂勾可以加载编译程序程序器挂勾。
操纵控制模块和块正中间的关系,大伙儿可以掌握每个文本文档全是有一个操纵控制模块,而一个块由很多操纵控制模块组成。
Webpack所有装袋整个过程全是有这种恶变恶性事件
如何编写一个简单的加载器
倘若你觉得你未能一开始,你可以以以再度看一下我是如何开发设计设计方案和改进的mini-program-webpack-loader一步歩装袋手机微信微信小程序。
有一个固定不动没动的例程。最开始,您务必有一个app.json文本文档而界定所有网页页面网页页面相对性相对路径。接着每个网页页面网页页面有四个文本文档:.js,.json,.wxml,.wxss。
因而我运用app.json作为webpack內容。当webpack推行手机软件\\ u0027s apply时,我得到內容以把握有哪些网页页面网页页面。
有两个手机软件,MultiEntryPlugin,SingleEntryPlugin。
你为什么要那般做?
因为webpack会根据你的內容配置內容,而不仅仅是webpack配置中的內容,import,require.ensure会转换成一个內容来确立转换成的文本文档数,大伙儿不肯装袋所有的js将网页页面网页页面转换为文本文档,务必
运用SingleEntryPlugin转换成新的安全通道操纵控制模块;和这种静态数据数据信息资源一样,大伙儿可让用MultiEntryPlugin手机软件来处理,运用这类文本文档作为安全通道操纵控制模块借助,在加载器中配置文本文档加载器来放置
静态数据数据信息文本文档输出。
伪编号下列:
Const MultiEntryPlugin \\ u003d require \\ u0027webpack / lib / MultiEntryPlugin \\ u0027;
Const SingleEntryPlugin \\ u003d require \\ u0027webpack / lib / SingleEntryPlugin \\ u0027;
类MiniPlugin {
应用编译程序程序器{
让挑选项\\ u003d compiler.options ## #Let context \\ u003d compiler.rootContext
设置內容\\ u003d options.entry
设置文本文档\\ u003d loadFilesentry
让脚本制作制作\\ u003d files.filterfile \\ u003d \\ u003e /\\\\.js$/.testfile\\r\\n
设置资产\\ u003d files.filterfile \\ u003d \\ u003e!/ \\\\。js $ / .testfile
新的MultiEntryPlugincontext,assets,\\ _ \\ _设置__ \\ u0027.applycompiler
scripts.forEachfile \\ u003d \\ u003e {
设置fileName \\ u003d relativecontext,file.replaceextnamefile,\\ u0027 \\ u0027;
New SingleEntryPlugincontext,file,fileName.applycompiler;
}
}
}
复制编号
#n ##当然,倘若你推行上述具体实际操作,你可以发现还会继续再次有一个main.js,xxx.js在运用MultiEntryPlugin时要用的姓名,main.js相符合于配置的內容转换成的文本文档,以及xxx .js由MultiEntryPlugin转换成。
这类文本文档其实不是大伙儿务必的,因而大伙儿务必处理他。
倘若您掌握webpack文字文本文档,大伙儿有很多地域可以修改最终的装袋文本文档,例如编译程序程序器
emit恶变恶性事件,optimizeChunks相关的编译程序程序恶变恶性事件可以进行。
它本质上是修改compilation.assets总体目标。
emit-event用于mini-program-webpack-loader来处理这一无需的内容。输出。
小包裝当然其实不是那么简易,你尽量可用wxml,wxss,wxs和自定构件引进,因而本次你务必一个加载器来开展,加载器务必做的事情十分简单 - 剖析借助文本文档,例如wxml务必剖析导进构件的src,wxs的src,.wxss务必剖析导进,务必wxs,最后运用loadModule方法将其再加到加载器中。
自定构件最初是在再加內容步骤保持中立即获得的,因此无需加载器来开展它。
这没有难点,但是开发设计设计方案工作中工作经验相对性性较差。倘若再加自定构件,网页页面网页页面,webpack并不是可认知能力的,那么您务必检查在网页页面网页页面中.json变动时不是是再加了自定。
再加了构件或阿里云域名页网页页面。
这时候候,我遇到了一个难点。 addModule方法无法再加自定构件的js,因为自定构件的js尽量做为单独的內容文本文档。
它可以在加载器中开展,因而尝试将文本文档传输给手机软件,因为手机软件在加载器之前推行,因此可以建立加载器和手机软件。 ## #Simple和粗鲁的方式:
// loader.js
类MiniLoader {}
Module.exports \\ u003d涵数content {
New MiniLoaderthis,content
}
Module.exports。$ applyPluginInstance \\ u003d function plugin {
MiniLoader.prototype。 $ plugin \\ u003d plugin
}
// plugin.js
Const loader \\ u003d require \\ u0027./loader \\ u0027 \\ n
类MiniPlugin {
应用编译程序程序器{
Loader。$ app
lyPluginInstancethis;
}
}
复制编号
但.... ....
文本文档传输给手机软件,但是假如你运用SingleEntryPlugin时,你可以发现它没有一进一步际实际效果。
因为webpack在编译程序程序器转换成后无法辨别新操纵控制模块,因而它不了功效。这时候候,大伙儿务必根据文本文档猜测。大伙儿如何让webpack认知能力新操纵控制模块并根据文字文本文档中的恶变恶性事件进行关键字查询?
您可以看到编译程序程序开展情况下开启编译程序程序needAdditionalPass恶变恶性事件挂勾:
this.emitAssetscompilation,err \\ u003d \\ u003e {
if err return finalCallbackerr;
倘若compilation.hooks.needAdditionalPass.call {
compilation.needAdditionalPass \\ u003d true; \\ n
Const stats \\ u003d新的Statscompilation;
stats.startTime \\ u003d startTime;
stats.endTime \\ u003d Date.now;
this.hooks.done.callAsyncstats, err \\ u003d \\ u003e {
倘若歪斜确返回finalCallbackerr;
this.hooks.additionalPass.callAsyncerr \\ u003d \\ u003e {
if err return finalCallbackerr;
thispileonCompiled;
};
};
Return;
}
this.emitRecordserr \\ u003d \\ u003e {
倘若歪斜确返回finalCallbackerr;
Const stats \\ u00 3d new Statscompilation;
Stats.s
Copyright © 广州凡科互联网科技有限公司 版权所有 粤ICP备10235580号
全国服务电话:4000-399-000 传真:021-45545458
公司地址:广州市海珠区工业大道北67号凤凰创意园