webpack引入第三方库的方式及注意事项(代码示例)

本篇文章给大家带来的内容是关于webpack引入第三方库的方式及注意事项(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一般情况下,我们不用担心所使用的第三方库,在npm管理仓库中找不到。

如果需要某一个库,如:jquery,可以直接运行npm install jquery脚本命令来安装这个项目所需要的依赖;

然后,在使用jquery的模块文件中,通过import $ from ‘jquery’或者var $ = require(‘jquery’)来引入。

这是常用的在webpack构建的项目中引入第三方库的方式。

注:为了更好的演示示例代码,示例是在nodemon这篇文章的基础上操作的。

但是,在不同的场景下,对webpack构建的项目有不同的需求:

项目的体积足够小(cdn)

如果是webapck的处理方式,可参考webapck——实现构建输出最小这篇文章。

使用非webapck的处理方式,如:CDN。

操作也很简单,如果使用html-webpack-plugin直接在模板文件template/index.html中引入某个cdn(如:boot CDN)上的某个第三方库(如:jquery),参考代码如下:

        third party    

登录后复制

然后,在module.js中使用jquery即可,参考代码如下:

require('./module.css');module.exports = function() {    $(document.body).append('

hello webpack

') }

登录后复制

最后,运行npm run test,构建结束后,你会在浏览器中看到hello webpack字样,背景是红色的页面效果。

全局环境下使用第三方库(provide-plugin or imports-loader)

为了避免每次使用第三方库,都需要用import或者require()引用它们,可以将它们定义为全局的变量。

而webpack的ProvidePlugin内置的插件,可以解决这个问题。详情可参考ProvidePlugin这篇文章的介绍。

避免于cdn引用的jquery冲突,这里使用lodash。

首先,安装lodash依赖,命令如下:

yarn add lodash --dev

登录后复制

然后,在webpack.config.js中,添加如下代码:

new webpack.ProvidePlugin({        _: 'lodash'}),

登录后复制

其次,在module.js中添加如下代码:

...var arr = [1, 2, 3, 4, 5 ,6];// provide-plugin$(document.body).append('

' + _.concat(arr, '~') + '</h1');...

登录后复制

最后,运行npm run test脚本命令,构建完成后,你就可以浏览器的页面中增加了1,2,3,4,5,6,~。

如果,你想指定lodash的某个工具函数可以全局使用,如:_.concat,

首先,像下面这样修改webapck.config.js,代码如下:

...new webpack.ProvidePlugin({        // _: 'lodash',        _concat: ['lodash', 'concat']}),...

登录后复制

然后,修改module.js,代码如下:

...var arr = [1, 2, 3, 4, 5 ,6];// provide-plugin// $(document.body).append('

' + _.concat(arr, '~') + '</h1');$(document.body).append('

' + _concat(arr, '~') + '</h1');...

登录后复制

如果不喜欢用插件的,也可以考虑使用import-loader,它也可以实现相同的目的。

为了避免不必要的干扰,可以使用underscore来演示。

首先,安装imports-loader依赖,命令如下:

yarn add imports-loader --dev

登录后复制

然后,安装underscore依赖,命令如下:

yarn add underscore

登录后复制

其次,在webapck.config.js中添加如下代码:

...module: {        rules: [                {                        test: require.resolve('underscore'),                        use: 'imports-loader?_=underscore'                },                ...        ]},...

登录后复制

注:underscore和lodash都是用的是单例的模式开发的,它们实例化的构造函数的名字都是_,为了作区分,需要对其中一个做一下改变。imports-loader对这个标识起别名有点儿困难,而provide-plugin则没有这个问题,可以定一个个性化的别名。

修改webpack.config.js,代码如下:

new webpack.ProvidePlugin({        // _: 'lodash',        // _concat: ['lodash', 'concat'],        __: 'lodash'}),

登录后复制

可以为lodash定义为__与underscore的_作区分。

然后,修改module.js,代码如下:

...// provide-plugin// $(document.body).append('

' + _.concat(arr, '~') + '</h1');// $(document.body).append('

' + _concat(arr, '~') + '</h1');$(document.body).append('

' + __.concat(arr, '~') + '</h1');...

登录后复制

最后,保存所有的文件,可以下浏览器中看到相似的结果(保存后,nodemon自启动浏览器)。

cdn与externals

之前遇到了一些externals的问题,为什么要详细的说,是因为很多人不明白它到底用来干什么的。

场景再现:

之前,有一个项目使用了jquery,由于这个库的比较经典,它在应用的各个模块中被频繁引用。使用的方式如下:

import $ from 'jquery'

登录后复制

或者

var $ = require('jquery')

登录后复制

结果是构建结束后,文件比较大。那么考虑使用cdn,如上文描述的那样。这样需要删除import或require的引用,同时删除安装的jquery依赖,但是由于项目结构比较乱,模块比较多,为了避免造成少改或者漏改的问题,会造成应用出错。该怎么办呢?

有的人说,不删除jquery依赖,那么使用cdn的目的就没有意义了。而使用external则可以解决这个问题。

可以在module.js文件中添加如下代码:

...var $ = require('jquery')...

登录后复制

然后,保存文件,发现构建输出提示如下的错误:

ERROR in ./module.jsModule not found: Error: Can't resolve 'jquery' in 'E:workspacemewebpack-playdemoexample-1' @ ./module.js 3:0-23 @ ./main.js @ multi (webpack)-dev-server/client?http://localhost:8080 ./main.js

登录后复制

模块module.js中的jquery不能被解析。

紧接着,在webpack.config.js中添加如下代码:

externals: {     jquery: 'jQuery',    jquery: '$'},

登录后复制

其中jquery代表的是require(‘jquery’)中的jquery,而jQuery和$代表的是jquery这个库自身提供的可是实例化的标识符。其它的库的cdn化,修改类似jquery。

但是,如果在项目一开始就决定用cdn的话,就不要在使用jquery的模块中,使用var $ = require(‘jquery’) 或 import $ from ‘jquery’;,虽然这样做不会报错,但是如果出于某方面的考虑,后期可能会引入jquery依赖,那么就必须使用var $ = require(‘jquery’) 或 import $ from ‘jquery’;。

参考源代码

以上就是webpack引入第三方库的方式及注意事项(代码示例)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2734262.html

(0)
上一篇 2025年3月8日 01:03:41
下一篇 2025年3月5日 20:59:22

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript中栈和队列的算法解析

    本篇文章给大家带来的内容是关于javascript中栈和队列的算法解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、认识数据结构 什么是数据结构?下面是维基百科的解释 数据结构是计算机存储、组织数据的方式 数据结构意…

    2025年3月8日
    200
  • Vue.js中computed和methods之间有什么区别?(附示例)

    本篇文章给大家带来的内容是关于vue.js中computed和methods之间有什么区别?(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 官方文档中已经有对其的解释了,在这里把我的理解记录一下。 compute…

    编程技术 2025年3月8日
    200
  • 常用的前端框架有哪些

    常用的前端框架有Bootstrap框架、React框架、Vue框架、Angular框架、Foundation框架等等 现在越来越多的前端框架开始出现,这为我们的项目需求带来了极大的方便。今天在文章中将为大家详细介绍几种前端框架,具有一定的参…

    2025年3月8日 编程技术
    200
  • JavaScript数据结构与算法之集合与字典的介绍

    本篇文章给大家带来的内容是关于javascript数据结构与算法之集合与字典的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 说明:JS数据结构与算法 系列文章的代码和示例均可在此找到 一、集合Set 1.1 集合数据…

    2025年3月8日 编程技术
    200
  • js是前端还是后端

    javascript是前端开发语言,是一种动态类型、弱类型、基于原型的语言;javascript经常与html、css技术一起构成前端开发,javascript一般通过ajax与后台进行数据交互。 本文操作环境:Windows7系统、Del…

    2025年3月8日
    200
  • javascript动态合并纵向单元格的方法介绍(代码)

    本篇文章给大家带来的内容是关于javascript动态合并纵向单元格的方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、需求 合并相邻行内容相同的单元格。 2.概念 rowspan指定单元格纵向跨越的行数…

    2025年3月8日
    200
  • React组件模式的详细介绍(附示例)

    本篇文章给大家带来的内容是关于react组件模式的详细介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 组件是 React 的核心,因此了解如何利用它们对于创建优秀的设计结构至关重要。 什么是组件 根据 Rea…

    2025年3月8日 编程技术
    200
  • JavaScript实现淘宝放大镜的两种方法介绍(代码示例)

    本篇文章给大家带来的内容是关于JavaScript实现淘宝放大镜的两种方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 啥是淘宝放大镜 这个,当你的鼠标移动到左边的主图上时,右边会出现一个放大的图,暂且就…

    2025年3月8日 编程技术
    200
  • JavaScript解析URL的方法介绍(代码示例)

    本篇文章给大家带来的内容是关于javascript解析url的方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 在 Web 开发中,有许多情况需要解析 URL,这篇主要学习如何使用 URL 对象实现这一点…

    2025年3月8日
    200
  • JavaScript基础数据的梳理

    本篇文章给大家带来的内容是关于javascript基础数据的梳理,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 看了一些资料,结合ES6、高程和MDN,对JS核心知识点进行了梳理。由于篇幅有限,这里只对我认为重要的知识做了…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论