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 ...
随机推荐
- Nginx 高性能架构解析
本文详细探讨了Nginx的反向代理.负载均衡和性能优化技术,包括配置优化.系统优化.缓存机制和高并发处理策略,旨在帮助专业从业者深入理解并有效应用Nginx. 关注TechLead,复旦博士,分享云服 ...
- workman的工作流程
workerman有两种进程模型1.基本的master worker模型2.master gateway worker模型 master worker模型工作流程及进程间关系如下: master wo ...
- [oeasy]python0007-调试程序_debug
调试程序 回忆上次内容 py 的程序是按照顺序执行的 是一行行挨排解释执行的 程序并不是数量越多越好 kpi也在不断演化 编辑 写的代码越多 出现的bug就越多 什么是bug 如何找bu ...
- SMU Summer 2024 Contest Round 2 (7.9)zhaosang
A-A http://162.14.124.219/contest/1006/problem/A 考查用vector画图 我枚举到n==5才开始用,浪费40分钟,还是找规律太慢,得多学 做题代码如下: ...
- 这才是 PHP 高性能框架 Workerman 的立命之本
大家好,我是码农先森. 在这个大家都崇尚高性能的时代,程序员的谈笑间句句都离不开高性能,仿佛嘴角边不挂着「高性能」三个字都会显得自己很 Low,其中众所皆知的 Nginx 就是高性能的代表.有些朋友可 ...
- docker 安装 centos8 mysql8 java tomcat
docker 安装 centos8 mysql8 java tomcat 一,首先在window10系统安装docker,这里就不再描述了. 二,启动docker下载安装centos8镜像 注意: ...
- 10、Git之国内项目托管平台(Gitee码云)
10.1.简介 众所周知,GitHub 服务器在国外,如果网络不好的话,严重影响使用体验,甚至会出现登录不上的情况. 针对这个情况,可以使用国内的项目托管平台-- Gitee 码云,来替代 Githu ...
- 5、SpringBoot2之整合Durid
创建名为springboot_druid的新module,过程参考3.1节 5.1.引入相关依赖 注意:虽然本文使用的是 spring boot 2.7.18 和 MySQL 5.7 ,但是出于可移植 ...
- 2、SpringBoot2之入门案例
2.1.创建Maven工程 2.1.1.创建空项目 2.1.2.设置项目名称和路径 2.1.3.设置项目sdk 2.1.4.项目初始状态 注意:需要关闭项目再重新打开,才能看到SpringBoot-P ...
- 【转载】 tensorflow: 怎样找到对应的bazel 版本和安装
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u011279649/article/de ...