unpkg 与 npm 的基本介绍

UNPKG是一个基于npmregistry的CDN服务,提供快速获取JavaScript包的功能,无需安装。它支持直接在浏览器和Node.js中使用,特点是快速、零配置和版本自由。npm则用于本地包管理,包括安装和更新模块。两者的主要区别在于使用场景,UNPKG适合快速开发和测试,但不支持版本锁定,而npm能更好地控制项目依赖。
摘要由CSDN通过智能技术生成

目录

定义

特点

原理

使用

npm安装流程

npm install

npm update

registry

区别

总结


定义

UNPKG是一个基于npm registry 的静态资源 CDN 服务,它可以快速获取和使用任何JavaScript包,无需安装任何软件或包。UNPKG可以从NPM仓库中获取任何包,支持直接在浏览器中使用和在Node.js中使用。

特点

  1. 快速:UNPKG使用CDN加速,可以提供更快的包下载速度,尤其是对于全球用户来说。

  2. 零配置:UNPKG不需要任何配置,可以直接在浏览器中使用,非常方便。

  3. 支持npm仓库:UNPKG可以快速从npm仓库获取JavaScript包。

  4. 可以直接在HTML文件中使用:UNPKG可以直接在HTML文件中使用,不需要经过打包处理。

  5. 版本自由:UNPKG支持通过URL查询参数来控制包的版本、文件和格式等。

原理

访问 upkg 地址时,在回源服务里面根据 URL 参数,去 npm registry 下载对应的 npm 包,解压后响应对应的文件内容。

使用

UNPKG的使用非常简单,只需在浏览器中打开UNPKG网站,搜索要使用的包,并复制其链接地址,然后将链接地址添加到项目的HTML文件中即可。例如,对于jQuery 3.6.0,链接地址为:https://unpkg.com/jquery@3.6.0/dist/jquery.min.js

npm安装流程

NPM(Node Package Manager)——node包管理器。因为有NPM,只需执行一行npm install命令,就能安装别人写好的模块 。

npm install

安装之前npm install会先检查node_modules目录之中是否已经存在指定模块。如果存在,就不再重新安装,即使远程仓库已经有了一个新版本也是如此。如果 npm 要强制重新安装,可以使用 -f 或 --force 参数。

npm install <packageName> --force

npm update

如果想更新已安装模块,就要用到npm update命令。

npm update <packageName>

它会先到远程仓库查询最新版本,然后查询本地版本。如果本地版本不存在,或者远程版本较新,就会安装。

registry

npm update命令怎么知道每个模块的最新版本呢?答案是 npm 模块仓库提供了一个查询服务,叫做 registry。以 npmjs.org 为例,它的查询服务网址是 registry.npmjs.org/ 。这个网址后面跟上模块名,就会得到一个 JSON 对象,里面是该模块所有版本的信息。比如,访问 registry.npmjs.org/react,就会看到 react 模块所有版本的信息。因npm view还有一些别名,所以下面几个命令的效果是一样的。

npm view react
npm info react
npm show react
npm v react

registry 网址的模块名后面,还可以跟上版本号或者标签,用来查询某个具体版本的信息。比如访问 registry.npmjs.org/react/v0.17… ,就可以看到 React 的 0.17.6 版。返回的 JSON 对象里面,有一个dist.tarball 属性,是该版本压缩包的网址。到这个网址下载压缩包,在本地解压,就得到了模块的源码。npm install 和 npm update命令,都是通过这种方式安装模块的。

{
    dist: { 
        shasum: '2a57c2cf8747b483759ad8de0fa47fb0c5cf5c6a', 
        tarball: 'http://registry.npmjs.org/react/-/react-0.17.6.tgz' 
    }
}

将第三方包安装到node_modules后,每个包的package.json文件中通过main字段或moudule字段告知了该包的入口文件。在我们使用import x from xxx语句调用第三方库的方法时,就通过入口文件找到了相应的功能。

区别

【使用时】

  • NPM是安装第三方包到本地使用
  • CDN是通过链接访问,让用户的访问从距离他们最近的站点去获取到这些资源,缩短传输的距离,达到一个轻量、轻快的体验效果,当然网络不好的时候,资源请求会挂掉。

【打包时】

  • 会把NPM依赖的包打到本项目中,占用包的体积
  • CDN通过链接访问,不打到本地,能减少一些包带来巨大的体积

总结

UNPKG的优点是快速、简单和易用,特别适合于快速开发和测试。但是,由于UNPKG不支持版本锁定,可能会出现版本问题,此外,由于UNPKG是一个公共CDN服务,可能存在安全问题。

开发过程中,要根据实际情况有选择的使用两种资源的引入方式,既能使用NPM按需引入的优势,又可以享受CDN的优势。

如果只是按需引入了很少的依赖包也是没有必要用CDN引入的,因为根本问题是依赖包太大才需要用CDN的高带宽去解决。使用NPM安装第三方包,打包项目时会把相应的文件打包到本项目中,理论上使用本地文件肯定比从网络上去请求一个文件要更快一些。如果没有多少资源文件的话,强行并发下载,会产生多线程小文件的I/O瓶颈。

参考文章:

如何看待 unpkg cdn?

使用第三方库时CDN引入和NPM安装有什么区别?

好的,下面是一个使用Vue3 + ArcGIS JS API定义地图的npm包例子: 1. 在项目中初始化npm: ``` npm init ``` 2. 在项目中安装ArcGIS JS API和esri-loader: ``` npm install arcgis-js-api esri-loader ``` 3. 在项目中创建一个名为`MapView`的组件并导出: ```javascript // MapView.vue <template> <div id="map-view"></div> </template> <script> import { defineComponent } from 'vue'; import { loadModules } from 'esri-loader'; export default defineComponent({ name: 'MapView', props: { zoom: { type: Number, default: 13 }, center: { type: Array, default: () => [-118.805, 34.027] }, basemap: { type: String, default: 'streets' } }, data() { return { map: null, mapView: null } }, mounted() { loadModules(['esri/Map', 'esri/views/MapView'], { css: true }) .then(([Map, MapView]) => { this.map = new Map({ basemap: this.basemap }); this.mapView = new MapView({ container: 'map-view', map: this.map, center: this.center, zoom: this.zoom }); }) .catch(err => { console.error(err); }); } }) </script> <style> #map-view { height: 500px; } </style> ``` 在上面的代码中,我们定义了一个名为`MapView`的组件,并通过`props`定义了组件的属性。在组件的`mounted`生命周期中,我们使用`esri-loader`动态加载了`esri/Map`和`esri/views/MapView`模块。然后我们创建了一个地图对象,以及一个地图视图对象,并将其附加到组件的DOM节点上。 4. 在项目中创建一个名为`index.js`的文件,并导出`MapView`组件: ```javascript // index.js import MapView from './MapView.vue'; export { MapView }; ``` 5. 在项目中创建一个名为`rollup.config.js`的文件,并添加以下配置: ```javascript // rollup.config.js import vue from 'rollup-plugin-vue'; import { nodeResolve } from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; import { terser } from 'rollup-plugin-terser'; import css from 'rollup-plugin-css-only'; export default { input: 'src/index.js', output: { name: 'VueArcGIS', exports: 'named' }, plugins: [ nodeResolve(), commonjs(), vue({ css: false }), css({ output: 'dist/vue-arcgis.css' }), terser() ], external: ['vue'] } ``` 在上面的代码中,我们使用了`rollup-plugin-vue`和`@rollup/plugin-node-resolve`等插件来处理Vue组件和模块依赖。同时,我们使用了`rollup-plugin-css-only`插件将组件中的CSS样式抽离到单独的CSS文件中。最后,我们使用`terser`插件对输出的代码进行压缩。 6. 在项目中运行`rollup`来构建npm包: ``` npx rollup -c rollup.config.js ``` 7. 在项目中创建一个名为`package.json`的文件,并添加以下配置: ```json { "name": "vue-arcgis", "version": "1.0.0", "description": "A Vue3 component for integrating ArcGIS JS API in your Vue applications", "main": "dist/vue-arcgis.umd.min.js", "module": "dist/vue-arcgis.esm-bundler.js", "jsnext:main": "dist/vue-arcgis.esm-bundler.js", "unpkg": "dist/vue-arcgis.umd.min.js", "files": [ "dist" ], "dependencies": { "arcgis-js-api": "^4.19.1", "esri-loader": "^3.0.0", "vue": "^3.2.20" } } ``` 在上面的代码中,我们定义了npm包的基本信息,并指定了输出文件的路径和各种模块的入口文件。 这样,我们就可以将Vue3和ArcGIS JS API集成到一个npm包中,并在其他项目中方便地使用该组件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值