博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpack中imports-loader,exports-loader,expose-loader的区别
阅读量:5355 次
发布时间:2019-06-15

本文共 1747 字,大约阅读时间需要 5 分钟。

Webpack有几个和模块化相关的loader,imports-loader,exports-loader,expose-loader,比较容易混淆。今天,我们来理一理。

imports-loaders

文档介绍的是:用于向一个模块的作用域内注入变量(Can be used to inject variables into the scope of a module.),官方的文档总是言简意赅但是不太好懂。我们来举个例子。

例子完整的代码可以
jqGreen.js文件里仅一行代码

//没有模块化$('#box').css('color','green');

index.js文件也只有一行代码

require('./jqGreen');

我们的配置文件中,是把index.js作为入口文件的。

{    entry:{    index:'./src/js/index.js'    }}

注意,我们并没有引入jquery。所以运行的结果是$ is not defined

但是如果我们稍微修改一下jqGreen的引入方式,就能很轻松的解决这个问题。

index.js文件

require('imports?$=jquery!./jqGreen');

当然,这个能运行之前,我们要npm install imports-loader一下。上面代码,把变量$注入进模块jqGreen.js。同时,我们指定了变量$=jquery。等于是在jqGreen.js文件的最顶上,加上了var $=require('jquery')。这样,程序就不会报$ is not defined的错误了。

exports-loader

exports有导出的意思,这让我们猜测它有从模块中导出变量的功能。实际情况大致如此。我们来看个小例子。

例子的完整代码在 
Hello.js文件中仅有一个方法,直接绑定在全局变量window上面。

window.Hello = function(){    console.log('say hello.'); }

然后我们在index.js文件里去引用这个Hello.js:var hello = require('./Hello.js');。这样引用的结果是变量helloundefined。因为我们在Hello.js文件里没有写module.exports=window.Hello,所以index.js里我们require的结果就是undefined。这个时候,exports-loader就派上用场了。我们只用把index.js的代码稍微改动一下:var hello = require('exports?window.Hello!./Hello.js');,这个时候,代码就能正确的运行了。变量hello就是我们定义的window.hello啦。

var hello = require('exports?window.Hello!./Hello.js');这行代码,等于在Hello.js里加上一句module.exports=window.Hello,所以我们才能正确的导入。

expose-loader

把一个模块导出并付给一个全局变量。文档里给了一个例子:

require("expose?libraryName!./file.js");// Exposes the exports for file.js to the global context on property "libraryName".// In web browsers, window.libraryName is then available.

例子中的注释是说把file.js中exports出来的变量付给全局变量"libraryName"。假如file.js中有代码module.exports=1,那么require("expose?libraryName!./file.js")window.libraryName的值就为1(我们这里只讨论浏览器环境)。

转载于:https://www.cnblogs.com/camikehuihui/p/8042722.html

你可能感兴趣的文章
页内的模块和组件抽象规划经验
查看>>
安全-分析深圳电信的新型HTTP劫持方式
查看>>
将Centos的yum源更换为国内的阿里云源
查看>>
git diff 的用法
查看>>
一段sql的优化
查看>>
十进制与十六进制的相互转换
查看>>
在Flex中用Validator检测数字、字符串、Email.
查看>>
[leetcode]4Sum
查看>>
POJ1062 昂贵的聘礼
查看>>
【零基础学习iOS开发】【02-C语言】08-基本运算
查看>>
雷林鹏分享Node.js JXcore 打包
查看>>
常见错误总结
查看>>
BZOJ3545&3551[ONTAK2010]Peaks——kruskal重构树+主席树+dfs序+树上倍增
查看>>
Django框架(十九)--Django rest_framework-认证组件
查看>>
我的MFC/C++学习笔记 http://blog.bccn.net/CrystalFan/6909
查看>>
Beta 冲刺(3/7)
查看>>
控制反转(IOC)和依赖注入(DI)
查看>>
php的<?php ?>标签匹配
查看>>
百马百石
查看>>
计算几何讲义——计算几何中的欧拉定理
查看>>