Webpack4-使用expose-loader将变量注册到全局
首先贴一下 package.json中的插件版本,不同的版本也许会有很大的差异:
// package.json
{
"name": "WEBPACK-DEV-1",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"dev": "webpack-dev-server",
"build": "webpack --config webpack.config.js"
},
"devDependencies": {
"@babel/core": "^7.14.6",
"@babel/preset-env": "^7.14.5",
"autoprefixer": "^8.0.0",
"babel-loader": "^8.2.2",
"css-loader": "^5.2.6",
"expose-loader": "0.7.5",
"html-webpack-plugin": "^4.2.1",
"less": "^4.1.1",
"less-loader": "^6.1.0",
"mini-css-extract-plugin": "^1.6.0",
"optimize-css-assets-webpack-plugin": "^4.0.0",
"postcss-loader": "^4.0.4",
"style-loader": "^2.0.0",
"uglifyjs-webpack-plugin": "^2.2.0",
"webpack": "^4.28.2",
"webpack-cli": "^3.1.2",
"webpack-dev-server": "^3.11.2"
},
"dependencies": {
"jquery": "^3.6.0"
}
}
拿jquery为例子,使用 yarn add jquery -S 安装jquery到项目里面,这时候可以通过require("jquery")来获取,但是使用window.jquery仍然是undefined,那么如何把jquery挂在全局变量window(浏览器环境)上呢?
在 webpack.config.js 的 module.rules 里面添加如下配置对象即可,然后引用的话就可以直接用了
// webpack.config.js
{
test: require.resolve('jquery'),
use:'expose-loader?$'
},
// index.js
var $ = require("jquery");
console.log('$,',$)
// expore-loader 暴露 全局的loader 内联的loader
// loader[pre:前面执行的loader,normal:普通的loader,liader:内联的loader,postloader:后置loader]
// 问:什么叫做内联的loader?
// 答:var $ = require("expose-loader?$!jquery");希望把jquery暴露出去,暴露为"$",暴露给全局上
console.log('内联window.$,',window.$)

完整webpack配置:
var path = require('path');
let HtmlWebpackPlugin = require('html-webpack-plugin')
let MiniCssExtractPlugin = require('mini-css-extract-plugin');
let OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');//压缩.css文件
let UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin');//压缩js
module.exports = {
optimization:{//优化项
minimizer:[
new OptimizeCssAssetsWebpackPlugin(),
new UglifyjsWebpackPlugin({
cache:true,//启用缓存
parallel:true,//并发打包
sourceMap:true
})
]
},
mode: "production",//模式:production/development
entry: './src/index.js',
output: {
filename: "bundle.[hash:6].js", // 可以指定打包后的文件名不同,bundle.[hash:6].js 可以指定hash的长度
path: path.resolve(__dirname, 'build'),//路径必须是绝对路径
},
devServer: {
//开发服务配置
port: 3000,//端口
progress: true,//显示进度
contentBase: './build', //静态服务运行目录
compress: true,//压缩
},
plugins: [
new HtmlWebpackPlugin({
template: "./src/index.html",
filename: "index.html",
minify: {
removeAttributeQuotes: true,//把index.html双引号转化为单引号
collapseWhitespace: true,//折叠空行
},
hash: true,//文件添加hash戳,防止服务器环境缓存,比如apach或者nginx
}),
new MiniCssExtractPlugin({
filename: 'main.css',// 抽离出来的样式文件
})
],//webpack插件
module: {
rules: [
{
test:/\.js$/,
use:{
loader:'babel-loader',
options:{
presets:[ // 预设
"@babel/preset-env"
]
}
}
},
{
test: require.resolve('jquery'),
use:'expose-loader?$'
},
// 解析css,css-loader 主要负责解析@import.style-loader 把 css 插入到 head标签中
// loader 用法: 字符串
// 多个loader:数组,loader有顺序,从右向左执行
// {
// test: /\.css$/, use: [{
// loader: 'style-loader',
// options: {
// insert: function insertAtTop(element) {
// var parent = document.querySelector('head');
// // eslint-disable-next-line no-underscore-dangle
// var lastInsertedElement =
// window._lastElementInsertedByStyleLoader;
// if (!lastInsertedElement) {
// parent.insertBefore(element, parent.firstChild);
// } else if (lastInsertedElement.nextSibling) {
// parent.insertBefore(element, lastInsertedElement.nextSibling);
// } else {
// parent.appendChild(element);
// }
// // eslint-disable-next-line no-underscore-dangle
// window._lastElementInsertedByStyleLoader = element;
// },
// }
// }, 'css-loader']
// },
{
test: /\.css$/, use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader'
]
}
]
}
}
一定要注意版本!!!
Webpack4-使用expose-loader将变量注册到全局的更多相关文章
- Flask把变量注册到模板中
使用python的Flask框架时,参考<Flask Web开发>一书时,发现书中可以在全局使用Permission.FOLLOW变量. 但是自己在尝试是,确提示变量没有定义.经过搜索,找 ...
- Expose Loader & shit jquery
Expose Loader webpack https://github.com/xgqfrms/FEIQA/issues/31#issuecomment-418255126 require(&quo ...
- <转>MFC注册系统/全局热键。
<转>MFC注册系统/全局热键. 1. BEGIN_MESSAGE_MAP(CRS232TESTDlg, CDialog) //{{AFX_MSG_MAP(CRS232TESTDlg) O ...
- vue插件 使用use注册Vue全局组件和全局指令
插件一般会注册到全局使用 官方编辑插件介绍:https://vuefe.cn/v2/guide/plugins.html 全局组件: .首先建一个自定义组件的文件夹,比如叫loading,里面有一个i ...
- 在Form Load中设置showInTaskBar =false 或 隐藏窗口 this.Hide()时会导致注册的全局快捷键无效
在Form Load中设置showInTaskBar =false 或 隐藏窗口 this.Hide() 会导致注册的全局快捷键无效. 反正是其中一个,有点记不清了. 在Form Shown中s ...
- 使用gacutil把COM组件注册到全局缓存GAC中
我们在编写软件的时候,有时候需要调用COM组件,那就需要注册了,注册有两种,一种是使用regasm 在程序运行的时候注册,参考“pb调用C#编写的DLL类库“,不过受路径的限制.还有一种注册方式,使用 ...
- mappers:将sql映射注册到全局配置中
<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 --> <!-- 6.mappers: ...
- Vue全局弹窗:一次注册,全局可弹
Vue全局弹窗 今天来搞一个全局弹窗,不用每个文件都引入,只在main.js里作为全局原型引入就好了 先新建弹窗组件 toast.vue <template></template&g ...
- C#Winform 注册使用全局快捷键详解
C#.NET Winform 注册使用全局快捷键详解 借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Wi ...
- 构建前端第12篇之---在Vue中对组件,变量,函数的全局引入
张燕涛写于2020-01-16 星期two 本篇还是源于import和export的使用,昨天看es6入门 和MDN文档,大体上用法了解了,但今天看ElementUI源码的时候,看到 //src/in ...
随机推荐
- Dotnet算法与数据结构:Hashset, List对比
哈希集A 是存储唯一元素的集合.它通过在内部使用哈希表来实现这一点,该哈希表为基本操作(如添加.删除和包含)提供恒定时间平均复杂度 (O(1)).此外,不允许重复元素,使其成为唯一性至关重要的场景的理 ...
- PHP转Go系列 | 推荐一个强大的Go语言工具函数库
大家好,我是码农先森. 从 PHP 转到 Go 的朋友,常常会因为没有便捷的工具函数而感到苦恼.PHP 写的多了就会形成路径依赖,在写 Go 的时候时不时就会想到 PHP 强大的数组函数.当然写 Go ...
- 人工智能时代,前端全栈成就独立开发工程师 next.js 开发实战
next 可以服务端渲染,可以客户端渲染,让前端同事更有性价比,让我们做得可以更多 由于next.js 是基础于react 所以在正式学习next.js 之前我们了解一下react 什么叫模块 ,就 ...
- 2023/4/17 SCRUM个人博客
1.我昨天的任务 学习了easydict库的基本操作 2.遇到了什么困难 没有找到合适的人脸识别库 3.我今天的任务 初步学习dlib的安装,了解dlib的基础组件
- sqoop 从数据库导入数据到hdfs
前提 配置hadoop配置文件 前提 启动hadoop 配置hive 改名进入sqoop/conf 增加环境变量 tar xf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz ...
- python3解析wav文件获取dtmf值
操作系统 :Windows 10_x64 Python版本:3.9.2 从事FreeSwitch相关工作,大概率会遇得到DTMF,DTMF的传递方式有三种: In-band RFC2833 SIP-I ...
- 分享某Python下的mpi教程 —— A Python Introduction to Parallel Programming with MPI 1.0.2 documentation ( 续 #2 )
接前文: 分享某Python下的mpi教程 -- A Python Introduction to Parallel Programming with MPI 1.0.2 documentation ...
- LVGL btn组件
/************************************************* * * file name:widget_line.c * author :momolyl@126 ...
- MySQL手动执行rollback,内部实现分析
-- 测试手动回滚操作 -- 1手动开启事务 START TRANSACTION -- 2执行更新操作语句 UPDATE FraBakNtuAnalysize SET IsDeleted = 0 WH ...
- 旋转数组-python
旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向 ...