在es6模块中怎么引入传统的jQuery和jQuery插件呢?

2023-05-16

1、安装webpack和loader

为什么要安装webpack? 因为我们要用到webpack的 expose-loader。当然,webpack的打包功能我们也要用到。

mkdir demo-webpack && cd demo-webpack
npm init
cnpm install webpack webpack-cli --save-dev
cnpm install expose-loader -D
cnpm install --save jquery

上面的命令,我们创建并初始化了一个demo-webpack项目,然后安装了
webpack webpack-cli expose-loader jquery

注意jquery是--save的,webpack打包的时候会把jquery也打包到bundle.js

2、新建webpack.config.js

const path = require('path');

module.exports = {
    mode:"development",
    entry:"./src/main.js",
    output:{
       path: path.resolve(__dirname, 'dist'),
       filename:"bundle.js"
    },
    module:{
        rules: [
            {
                test: require.resolve('jquery'),
                use: [
                    {
                        loader: 'expose-loader',
                        options: '$'
                    },
                    {
                        loader: 'expose-loader',
                        options: 'jQuery'
                    }
                ]
            }
        ]
    }
}

注意: require.resolve('jquery')下面会解释

3、新建src文件夹和main.js(webpack配置文件中的入口文件)

import 'jquery';
import '../public/plugin/banner/js/velocity'
import '../public/plugin/banner/js/shutter'


$(function () {
    $('.shutter').shutter({
        shutterW: 2560, // 容器宽度
        shutterH: 1080, // 容器高度
        isAutoPlay: true, // 是否自动播放
        playInterval: 3000, // 自动播放时间
        curDisplay: 0, // 当前显示页
        fullPage: false // 是否全屏展示
    });
});

当webpack构建时,遇到import 'jquery';,就会告诉expose-loader处理。

第2步创建的webpack配置文件中的这句话require.resolve('jquery'),意思就是 当检测到 import jquery 或者 require(‘jquery’) 时,就把jquery的返回值(这里用返回值描述可能不正确)暴露给window.$或者window.jQuery。结果jQuery对象就绑定到全局window对象上了。

当然,既然在这里已经绑定到window上了,那在其他模块里面就不需要再通过import jQuery导入jQuery了。直接使用即可。

我们在这里(main.js)导入了一个jquery的轮播插件shutter.js,直接使用就好。

4、修改package.json,添加一个脚本,用于执行webpack打包命令

"scripts": {
    "webpack": "webpack --progress --display-modules --colors --watch",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

5、执行npm run webpack
若没错误,即可生成 dist\bundle.js

6、在页面里引入这个bundle.js就行了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>演示</title>

    <link rel="stylesheet" href="../public/plugin/banner/css/shutter.css">
</head>
<body>

    <div class="shutter">
        <div class="shutter-img">
        <a href="#" data-shutter-title="Iron Man"><img src="../public/img/河南大屏1.jpg" alt="#"></a>
        <a href="#" data-shutter-title="Super Man"><img src="../public/img/河南大屏2.jpg" alt="#"></a>
        <a href="#" data-shutter-title="The Hulk"><img src="../public/img/河南大屏3.jpg" alt="#"></a>
        <a href="#" data-shutter-title="The your"><img src="../public/img/河南大屏4.jpg" alt="#"></a>
        <a href="#" data-shutter-title="The your"><img src="../public/img/河南大屏 5.jpg" alt="#"></a>
        </div>
        <ul class="shutter-btn">
        <li class="prev"></li>
        <li class="next"></li>
        </ul>
        <div class="shutter-desc">
        <!-- <p>Iron Man</p> -->
        </div>
    </div>

    <script src="../dist/bundle.js"></script>
</body>
</html>

引入babel 编译es6语法

我们在main.js中加入这样一句lamda表达式
export const calculator = num => num * num; 然后,执行npm run webpack
用IE11打开index.html会发现报错了(chrome和firefox等现代浏览器不报错)

为了解决这个错误,我们需要引入babel 和 babel-polyfill

1、安装babel依赖 cnpm install babel-loader babel-core babel-preset-env --save-dev

2、在webpack.config.js中增加规则:

module:{
    rules: [
        {
            test: /\.js$/,
            exclude: /(node_modules|bower_components)/,
            use: {
                loader: 'babel-loader',
                options: {
                    presets: ['env']
                    }
            }
        }
    ]
}

babel-polyfill官方:https://babeljs.io/docs/en/babel-polyfill

现在再打包一次,刷新一下IE浏览器,错误已经没有了。

当需要用到更新颖的es6语法时,需要引入babel-polyfill (安装babel-polyfill是为了‘垫’出一个环境)

3、安装 babel-polyfill cnpm install --save babel-polyfill: 注意不是 –save-dev

4、在入口文件(main.js)的顶部导入 import "babel-polyfill";或者下一步

5、With webpack.config.js, add babel-polyfill to your entry array:
entry: ["babel-polyfill", "./src/main.js"]

在模块里引入css文件

我们在index.html里引入了一个css文件

<link rel="stylesheet" href="../public/plugin/banner/css/shutter.css">

现在我们要把它打包到bundle.js里,所以在main.js里导入它
import '../public/plugin/banner/css/shutter.css'

1、只是这样还不行,我们还需要安装三个loader style-loader css-loader url-loader

cnpm install --save-dev style-loader  css-loader  url-loader

style-loader 是把打包好的css插入到html页面中的
url-loader: 因为图片中引用了图片路径,所以需要它处理

2、在webpack.config.js中增加这几条规则

{
    test: /\.css$/,
    use: ['style-loader','css-loader']
},
{
    test: /\.(png|jpg|gif)$/,
    use: [
        {
            loader: 'url-loader',
            options: {
                limit: 8192
            }
        }
    ]
},

使用 HtmlWebpackPlugin 插件

我们打包出来的dist目录只有一个bundle.js,而我们的index.html是在src目录下的。
现在我想把index.html也打包到dist目录,这样我发布的时候只需要拷贝dist就行了。
(如果现在发布,需要打包dist、src、public-图片)

1、安装插件 cnpm install --save-dev html-webpack-plugin

2、修改webpack.config.js

//在文件顶部增加
var HtmlWebpackPlugin = require('html-webpack-plugin');

//然后再增加
plugins: [
    new HtmlWebpackPlugin({
        title:"webpack自动演示系统",
        template:"./src/index.html"
    })
]

3、修改index.html的title

<title><%= htmlWebpackPlugin.options.title %></title>

4、执行打包,index.html就拷贝到dist\index.html了

TODO: 怎么把html引入的图片也打包到dist目录?

<a href="#" data-shutter-title="Iron Man"><img src="../public/img/河南大屏1.jpg" alt="#"></a>

这是我的示例代码【欢迎下载】: demo-webpack.rar

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在es6模块中怎么引入传统的jQuery和jQuery插件呢? 的相关文章

  • 使用 jquery 生成网站的屏幕截图

    我想严格使用 javascript 生成任何给定 url 的屏幕截图缩略图 如果这无法完成 任何人都可以指出我使用自己的 api 执行此操作的正确方向吗 编辑我只是决定作弊并使用框架 因为无论如何 这是我为了好玩而做的事情 但是感谢所有出色
  • 根据分辨率更改字体大小

    我正在开发一个网页 它的不同段落 h 等使用不同的尺寸 我在用着em sizes 字体大小 2em 举个例子 但是 当我将屏幕分辨率更改为较低的分辨率时 我希望该尺寸也较小 为此 我尝试了以下代码
  • 如何限制选择标签中的最小字符

    我想限制 Selectize 标签输入的最少 3 个字符 是否可以 select中有什么事件吗 我有同样的问题 正如 Rory 所提到的 通过插件 其实很简单 你可以找到标签最小字长过滤的官方示例here https github com
  • 如何格式化 内的文本以创建像 gmail 这样的边界框/标签系统,SO

    我正在构建一个边界框 边界框用于gmail 当你写一个联系人时 它会出现一个边界框 另一个例子是 YouTube 当你写标签时 我正在尝试创建一个类似的脚本 但我在这里遇到了一些麻烦 我想将我的脚本放在输入框中 但问题是 当我使用 html
  • 如何使用 javascript 确定字符串是否只包含空格?

    如何使用 javascript 确定输入字符串是否仅包含空格 另一个好帖子 更快的 JavaScript 修剪 http blog stevenlevithan com archives faster trim javascript 您只需
  • 如何将图像添加到 jquery 工具提示

    我还没有看到这个确切的问题得到解决 如果有 请指出它 我正在使用 jquery 的 ui 工具提示 我有一个链接 当您将鼠标悬停在它上面时 我想显示一张图像 到目前为止 没有什么对我有用 标题中的 ui 代码 HTML see a a
  • 需要 jQuery 代码将参数附加到 div 中包含的所有 url

    我需要一个附加参数的 jQuery 代码片段action xyz页面内的所有 url 请注意 还应该检查 url 是否已附加其他参数 例如 对于诸如index php i 1它应该附加 action xyz对于没有参数的 url 例如ind
  • jquery-mobile 加载到 android WebView 中

    我无法将 jquerymobile 装饰的网页加载到 Android WebView 中 考虑 jquery 移动演示站点 http jquerymobile com demos 1 0a4 1 http jquerymobile com
  • 当鼠标悬停在链接上时,如何在链接旁边创建弹出框?

    这是我想要实现的 我的网页上显示了两个超链接 a href http foo com foo a a href http bar com bar a 我还有两个对 div 链接的描述 div foo means foo div div ba
  • 获取点击元素的 HTML 内容 jQuery

    我有以下 HTML
  • jQuery stopPropagation 不起作用

    我正在使用以下内容选色器 https github com meta100 mColorPicker blob master javascripts mColorPicker js它工作正常 但是当我单击颜色选择器图标时 我不希望它冒泡到主
  • 匹配数组中的对象并合并

    UPDATE 我有一个名为的对象数组cars包含 li 标签 其中包含有关汽车的属性数据 例如价格 汽车类型等 我的目标是 如果这些汽车符合某些标准 则将它们合并到一个列表中 要求 快速性能 保持相同的汽车数组结构 Main Goal Ma
  • 使用JQuery检查元素是否有边框?

    所以我正在玩 el css 尝试确定元素是否有边框 我用 css border style solid 设置边框 这是可行的 但实际上它设置了 4 种单独的样式 border right style border left style bo
  • 使用 javascript 将 html 文本渲染为位图,无需服务器端代码

    我需要使用 javascript 代码来转换 html 中的文章 帖子 以便最终用户以位图的形式查看 有没有办法在没有服务器端代码的情况下做到这一点 example p testing text here p 您可以使用例如html2can
  • jQuery id 选择器在有 .在 ID 中[重复]

    这个问题在这里已经有答案了 我的html代码如下 div class chatbox html markup which is validated div 在上面的代码中dipesh parmardiv 动态添加 我正在使用以下代码访问它
  • 如何在每个组件完成加载后在 Angular 2 中运行 jquery 函数

    我已经尝试了所有生命周期挂钩 但无法实现所需的结果 我需要的结果是触发一个函数 该函数在加载每个元素 组件 后初始化用于单个页面上不同元素的许多 jquery 插件 假设你有这个结构 主页 滑块 小部件 产品旋转器 ETC 这些元素中的每一
  • Ajax JSON 数据和灯箱冲突

    我有一个带有灯箱插件的画廊设置光廊 http sachinchoolur github io lightGallery docs 该画廊与静态 HTML 完美配合 当我动态抓取 API 数据并尝试让灯箱处理这些项目时 问题就出现了 我似乎无
  • 在 ASP.NET MVC 4 中使用 jQuery Mobile 1.3 面板时的双滚动条

    我无法弄清楚这一点 将以下代码放入布局页面并在浏览器中查看后 我将显示 2 个垂直滚动条 div div 遇到了类似的问题 并注意到只有在使用我的自定义主题时才出现这种问题 我以错误的顺序将自定义主题添加到页面 这导致了问题 正确的顺序是
  • 有没有好的 JQuery twitter 小部件可以循环推文?

    我想知道是否有任何 JQuery 小部件提供了循环加载推文的功能 例如在官方小部件中http twitter com about resources widgets widget profile http twitter com about
  • Javascript 中的线性回归 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在网络浏览器中用 Javascript 进行最小二乘拟合 目前 用户使用 HTML 文本输入输入数

随机推荐

  • 百度在线人脸识别API简单实现教程

    这里 xff0c 记录一下百度人脸识别在线API的调用 xff0c 语言是python2 7 xff0c 供大家一起学习参考 本教程目录如下 1 申请百度人脸识别应用 2 获取token 3 图片的base64编码 4 人脸识别 5 结果绘
  • java中获取农历日期以及星期几

    34 status 34 200 34 msg 34 34 操作成功 xff01 34 34 success 34 true 34 data 34 34 weekend 34 34 星期二 34 34 date 34 34 2021年12月
  • syntax error: bad substitution是什么问题

    终端出现syntax error bad substitution是什么问题 解决办法 xff1a sudo dpkg reconfigure dash 在选择项中选N0 从 ubuntu 6 10 开始 xff0c ubuntu 就将先前
  • 如何获取自己的公网地址

    我们在上网的时候 xff0c 可以获取自己的公网地址 xff0c 比如在百度上输入ip地址 xff0c 就能显示自己的公网ip 下面讲解下 xff0c 从内网里面上网 xff0c 获取本机公网ip的原理 xff0c 如下所示 xff1a 本
  • 拯救被WSL占满的C盘

    适用场景 1 使用Windows 10做为开发平台 xff0c 并且C盘空间不是特别富裕 2 使用Windows自带的Windows Subsystem for Linux xff08 WSL xff09 默认将Liunx子系统安装在了C盘
  • 条件变量

    1 初始化条件变量pthread cond init include int pthread cond init pthread cond t cv const pthread condattr t cattr 返回值 xff1a 函数成功
  • python练习3:输入分数,输出对应的ABCD级别

    span class token keyword while span span class token boolean True span span class token punctuation span span class toke
  • ros Unable to locate package 找不到ROS软件包的问题解决

    这个问题可能由两个原因导致 xff1a 1 输入的软件包和ros版本不匹配 例如 xff0c 如果我是20 04的系统 xff0c ros版本为noetic xff0c 那么输入这行给1804 melodic准备的安装指令就会报错 xff1
  • python项目打包发布总结

    概览 这里主要收集python项目的打包 发布和部署的常用方法 xff0c 只是入门级别 xff0c 深入的流程还是以官方文档为准 xff08 链接每节都已经给出 xff09 distutils setuptools pip virtual
  • Mac Big Sur --ERROR launching JD-GUI

    适用于最新的macOS Monterey 更新系统后 xff0c 打开jd gui报如下错误 xff1a ERROR launching 39 JD GUI 39 No suitable Java version found on your
  • Centos7--FFmpeg编译安装

    一开始使用中文搜索 xff0c 照着csdn这份教程搞了一上午 xff0c 最后失败了 xff0c 恼火呀 换成英文搜索ffmpeg build arguments 点击第一条CompilationGuide FFmpeg xff0c 官方
  • 一种快速检测Mp4是否损坏的方法

    一种快速检测Mp4是否损坏的方法 由于项目上的需求 xff0c 需要一种能快速检测MP4文件是否有效 xff08 即能正常播放 xff09 的方法 网络上搜索到的绝大多数方案是使用ffmpeg或者ffprobe 以ffprobe为例 xff
  • java String类型转换BigDecimal类型最全工具类

    public class BigDecimalUtil String类型转换BigDecimal类型 public static BigDecimal StringToBigDecimal String str return new Big
  • Zookeeper leader选举源码分析(超详细)

    选举介绍 在开始分析选举的原理之前 xff0c 先了解几个重要的参数 服务器 ID xff08 myid xff09 比如有三台服务器 xff0c 编号分别是 1 2 3 编号越大在选择算法中的权重越大 zxid 事务 id xff08 Z
  • zookeeper集群部署

    伪集群 三份配置文件 z1 cfg tickTime 61 2000 initLimit 61 10 syncLimit 61 5 dataDir 61 Users twx code space internet zookeeper rel
  • zookeeper高级特性

    Multitenancy多租户 一般我们都是通过如下方式连接zk zkCli sh server 172 26 1 70 2181 172 26 1 71 2181 172 26 1 60 2181 我们也可以在连接参数后面追加一个路径 这
  • 【Windows】freeSSHd开启ssh出错

    描述 xff1a 打开freesshd设置面板的时候发现 SSH server is not running 下面是个红叉 xff0c 当我点击 Click here to Start 的时候 xff0c 提示 the specified
  • renderJson()返回的数据格式

    首先 xff0c 有一个实体类 xff0c KvmCluster 不用管父类 public class KvmCluster extends BaseReport 时间 public String timeStamp 主机名 public
  • SQL in 模糊查询的问题

    假如我有张表t student 该表有一字段 name 如果我想查询name 61 twx abc bfd 一般会写如下sql span class hljs operator span class hljs keyword select
  • 在es6模块中怎么引入传统的jQuery和jQuery插件呢?

    1 安装webpack和loader 为什么要安装webpack 因为我们要用到webpack的 expose loader 当然 webpack的打包功能我们也要用到 mkdir demo span class hljs attribut