`

compiler.apply.apply(compiler, optoins.plugins)

 
阅读更多

webpack.js文件有一句代码特别拗口

compiler.apply.apply(compiler, options.plugins);
compiler = new Compiler();
		compiler.context = options.context;
		compiler.options = options;
		new NodeEnvironmentPlugin().apply(compiler);
		if(options.plugins && Array.isArray(options.plugins)) {
			compiler.apply.apply(compiler, options.plugins);
		}
		compiler.applyPlugins("environment");
		compiler.applyPlugins("after-environment");
		compiler.options = new WebpackOptionsApply().process(options, compiler);

 实际上是compiler有一个方法叫apply,通过Tapable继承而来,

 此句代码是拿apply方法通过apply调用来更改上下文context(函数内部的this)

 compiler.apply等于以下代码

 

Tapable.prototype.apply = function apply() {
	for(var i = 0; i < arguments.length; i++) {
		arguments[i].apply(this);
	}
};

 

 故而compiler.apply.apply(compiler, options.plugins)等于以下代码

for(var i = 0; i < options.plugins.length; i++) {
options.plugins[i].apply.call(compiler);
}

 

分享到:
评论

相关推荐

    前端开源库-css-split-webpack-plugin

    plugins: [ new CssSplitWebpackPlugin({ // 配置兼容的浏览器列表,如 "last 2 versions", "&gt; 5%", "ie 8" browsers: ['ie 8'], // 其他可选配置... }), ], }; ``` ### 4. 常见问题与优化 - **性能考虑**...

    Android代码-Courier

    Courier 相信大家很多时候。在Activity进行页面传值时。很苦恼,需要定义各种各样的KEY定义传递数据。在传递时如果参数较多。... compile 'org.lzh.compiler.courier:courier-api:0.3' apt 'org.lzh.co

    Android代码-ActivityRouter

    ActivityRouter English README.md here 功能 支持给Activity定义 URL,这样可以通过 URL 跳转到Activity,支持在浏览器以及 app 中跳入。 集成 1. 添加引用 ...apply plugin: 'android-apt' depend

    webpack-plugin

    webpack-plugin插件的基本结构class MyPlugin { apply(compiler) { compiler.hooks.done.tap('My Plugin', (stats) =&gt; { console.log('Hello World!'); }); }}module.exports = MyPlugin;插件的使用plugins: [new ...

    前端开源库-post-compile-webpack-plugin

    apply: (compiler) =&gt; { compiler.hooks.postCompile.tap('MyPostCompilePlugin', () =&gt; { console.log('Webpack 编译已完成'); // 这里执行你的自定义代码 }); }, }), ], }; ``` ### 注意事项 - 确保在...

    KotlinCompilerPluginExample:这是一个示例项目,显示了如何创建Kotlin Compiler插件。该插件将打印“ Hello from”和正在编译的文件的名称,作为对终端日志的编译器警告。

    1. **定义插件接口**:编写一个实现了`org.jetbrains.kotlin.compiler.plugin.Plugin`接口的类。这个接口要求实现`apply`方法,该方法会在编译期间被调用。 2. **定义插件参数**:通过`@Option`注解声明插件的...

    Android代码-使用注解自动生成 Content provider 。

    Autoprovider Content provider generator for android that uses annotation processing. All helper classes are generated based on a ... apt 'in.workarounds.autoprovider:autoprovider-compiler:0.0.1' } Licens

    Android代码-intentbuilder

    IntentBuilder IntentBuilder is a type safe way of creating intents and populating them with extras. Use them with your Activities, Services, Broadcast... apt 'be.trikke:intentbuilder-compiler:1.2

    ButterKnife集成

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } // 注意:不要在这里放置应用级别的依赖;它们应该位于各个模块的 build.gradle 文件中。 ``` ##### 2. 在模块级`build.gradle`中添加依赖 接...

    Android代码-kenkenpa

    : kenkenpa-compiler Yet, another light weight Java FSM library. This library follows the idea from Google AutoValue. It generates a subclass that handles states. How to install? Use gradle. ...

    Eclipse中Maven设置

    - 添加`&lt;maven-compiler-plugin&gt;`插件,并设置`&lt;source&gt;`和`&lt;target&gt;`属性为所需的JDK版本,例如1.8。 ```xml &lt;plugins&gt; &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-compiler-plugin &lt;version&gt;...

    Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError的解决方法

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } ``` 在 Module build.gradle 文件中,我们使用了以下配置: ``` apply plugin: 'com.android.library' apply plugin: 'android-apt' android {...

    butterknife的使用

    apt 'com.jakewharton:butterknife-compiler:8.4.0' } ``` 这里的`compile`依赖用于在运行时使用Butterknife库,而`apt`依赖则是编译时使用的注解处理器,用于自动生成绑定代码。 #### 三、使用Butterknife ##...

    Android DaggerActivityComponent错误解决办法详解

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } 2. 添加依赖:在 build.gradle(Module:app)文件中添加以下代码: apply plugin: 'com.neenbedankt.android-apt' ... dependencies { ... ...

    接口服务平台+maven+zookpeer+dubbo+springMVC+M

    - 在项目属性设置中选择【Java Compiler】,确保编译器版本与项目所需版本一致,比如1.7。 4. **修改Dynamic Web Module版本:** - 在项目上右键点击【Properties】 -&gt; 【Project Facets】。 - 取消勾选...

    AMPermission:使用注释处理器可轻松使用Android M +的运行时权限

    权限 使用注释处理器可轻松使用Android M ... apt 'cc.tonv:permission-compiler:1.0.2' compile 'cc.tonv:permission-core:1.0.2' } 用 要求访问 MPermissions . requestPermissions( MainActivity . this , REQUECT_

    用Maven和Jetty开发调试WEB应用程序

    &lt;artifactId&gt;maven-compiler-plugin &lt;source&gt;1.6 &lt;target&gt;1.6 &lt;encoding&gt;UTF-8 &lt;/plugins&gt; ``` 完成以上步骤后,可以在命令行输入`mvn jetty:run`来启动Jetty服务器,或者输入`mvn jetty:stop`来停止...

    将1.5版本编译的jar包降级转编译为1.4版本的jar包

    &lt;artifactId&gt;maven-compiler-plugin &lt;version&gt;3.x &lt;source&gt;1.4 &lt;target&gt;1.4 &lt;/plugins&gt; ``` - 在Gradle中,可以这样配置: ```groovy apply plugin: 'java' sourceCompatibility = 1.4 ...

    buildFilesPlugin:webpack插件

    插件遍历`compiler.outputFileSystem`对象,收集所有输出的文件信息,并将这些信息写入到指定的Markdown文件中。这样,开发者可以轻松地查看和跟踪打包结果。 ### 5. 相关技术点 - **Webpack生命周期**:Webpack的...

    Intellj lombok 插件本地安装包

    进入"Settings" -&gt; "Build, Execution, Deployment" -&gt; "Compiler",勾选"Enable annotation processing"。 9. **IDEA与Lombok的配合使用**: 使用Lombok插件时,IDEA可以提供代码提示和自动完成,帮助你在编写带有...

Global site tag (gtag.js) - Google Analytics