欢迎来到皮皮网网站!

【android开发游戏源码】【反馈意见源码】【芒果粉源码】js源码打包

时间:2024-12-26 03:31:38 来源:低位充分换手指标源码

1.10分钟快速入门rollup.js
2.一文带你快速上手Rollup
3.如何对 js 源代码进行压缩?源码
4.10分钟快速精通rollup.js——Vue.js源码打包原理深度分析

js源码打包

10分钟快速入门rollup.js

       学习rollup.js的原因

       rollup.js是用于打包JavaScript ES模块的工具,许多知名框架和库如Vue、打包React都是源码通过它进行打包。相比于Webpack专注于应用打包,打包rollup.js更专注于JavaScript类库的源码打包。学习rollup.js对于理解Vue和React等框架源码,打包android开发游戏源码或者自建JavaScript类库至关重要。源码

       rollup.js的打包工作原理

       rollup.js可以将自定义的JavaScript代码与第三方模块打包在一起,形成库或应用,源码并允许使用插件实现特定功能。打包其运行机制支持ES模块标准,源码并可通过rollup-plugin-commonjs插件支持CommonJS标准。打包

       安装rollup.js

       使用nodejs环境安装rollup.js。源码首先全局安装rollup,打包依赖于nvm(Node Version Manager)来管理nodejs版本。源码

       rollup.js打包实例

       通过几个简单的步骤,从创建目录和文件开始,编写模块并使用rollup指令预览和输出打包后的代码。注意-f参数用于指定输出格式,如AMD、CJS、ESM等,并通过-o参数指定输出文件路径。

       验证打包结果

       打包成功后,尝试运行生成的文件,注意不同格式可能需要额外的工具或配置来兼容运行。通过babel-node和.babelrc配置文件实现ES模块到CommonJS格式的转换。

       rollup.js配置文件

       创建rollup.config.js文件,自定义打包配置,包括输入和输出。使用rollup -c指令进行打包,并查看生成文件的内容。

       API打包编写

       借助rollup.js API实现更个性化和模块化的打包方式,通过rollup-input-options.js和rollup-output-options.js配置输入和输出,实现多种格式的输出。

       总结

       本文介绍了rollup.js的多种打包方式,包括命令行、配置文件和API,并简要提及了更多特性如Tree-shaking、watch等。反馈意见源码下文将详细演示各种插件的用途及用法,敬请关注。推荐阅读其他相关资源以深化JavaScript打包工具的理解。

一文带你快速上手Rollup

       项目中一直用的都是webpack,前一段需要开发几个类库供其他平台使用,本来打算继续用webpack的,但感觉webpack用来开发js库,不仅繁琐而且打包后的文件体积也比较大。正好之前看vue源码,知道vue也是通过rollup打包的。这次又是开发类库的,于是就快速上手了rollup。

       什么是rollup?

       关于rollup的介绍,官方文档已经写的很清楚了:Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。

       与Webpack偏向于应用打包的定位不同,rollup.js更专注于Javascript类库打包。

       我们熟知的Vue、React等诸多知名框架或类库都是通过rollup.js进行打包的。

       为什么是rollup?

       webpack我相信做前端的同学大家都用过,那么为什么有些场景还要使用rollup呢?这里我简单对webpack和rollup做一个比较:

       总体来说webpack和rollup在不同场景下,都能发挥自身优势作用。webpack对于代码分割和静态资源导入有着“先天优势”,并且支持热模块替换(HMR),而rollup并不支持。

       所以当开发应用时可以优先选择webpack,但是rollup对于代码的Tree-shaking和ES6模块有着算法优势上的支持,若你项目只需要打包出一个简单的bundle包,并是基于ES6模块开发的,可以考虑使用rollup。

       其实webpack从2.0开始就已经支持Tree-shaking,并在使用babel-loader的情况下还可以支持es6 module的打包。实际上,rollup已经在渐渐地失去了当初的优势了。但是它并没有被抛弃,反而因其简单的API、使用方式被许多库开发者青睐,如React、Vue等,芒果粉源码都是使用rollup作为构建工具的。

       快速上手

       我们先花大概十分钟左右的时间来了解下rollup的基本使用以及完成一个hello world。

       安装

       首先全局安装rollup:

       接着,我们初始化一个如下所示的项目目录

       首先我们在src/index.js中写入如下代码:

       然后在命令行执行以下命令:

       执行命令,我们即可在dist目录下生成bundle.js文件:

       这时,我们再在example/index.html中引入上面打包生成的bundle.js文件,打开浏览器:

       如我们所预料的,控制台输出了柯森。

       到这里,我们就用rollup打包了一个最最简单的demo。

       可能很多同学看到这里对于上面命令行中的参数不是很明白,我依次说明下:

       其实除了这两个,还有很多其他常用的命令(这里我暂且列举剩下两个也比较常用的,完整的 rollup 命令行参数):

       使用配置文件(rollup.config.js)

       使用命令行的方式,如果选项少没什么问题,但是如果添加更多的选项,这种命令行的方式就显得麻烦了。

       为此,我们可以创建配置文件来囊括所需的选项

       在项目中创建一个名为rollup.config.js的文件,增加如下代码:

       然后命令行执行:

       打开dist/bundle.js文件,我们会发现和上面采用命令行的方式打包出来的结果是一样的。

       这里,我对配置文件的选项做下简单的说明:

       到这里,相信你已经差不多上手rollup了。

       进阶

       但是,这对于真实的业务场景是远远不够的。

       下面,我将介绍rollup中的几种常用的插件以及external属性、tree-shaking机制。

       resolve插件

       为什么要使用resolve插件

       在上面的入门案例中,我们打包的对象是本地的js代码和库,但实际开发中,不太可能所有的库都位于本地,我们大多会通过npm下载远程的库。

       与webpack和browserify这样的其他捆绑包不同,rollup不知道如何打破常规去处理这些依赖。因此我们需要添加一些配置。

       resolve插件使用

       首先在我们的项目中添加一个依赖the-answer,然后修改src/index.js文件:

       执行npm run build。css实例源码

       这里为了方便,我将原本的rollup -c -w添加到了package.json的scripts中:"build": "rollup -c -w"

       会得到以下报错:

       打包后的bundle.js仍然会在Node.js中工作,但是the-answer不包含在包中。为了解决这个问题,将我们编写的源码与依赖的第三方库进行合并,rollup.js为我们提供了resolve插件。

       首先,安装resolve插件:

       修改配置文件rollup.config.js:

       这时再次执行npm run build,可以发现报错已经没有了:

       打开dist/bundle.js文件:

       打包文件bundle.js中已经包含了引用的模块。

       有些场景下,虽然我们使用了resolve插件,但可能我们仍然想要某些库保持外部引用状态,这时我们就需要使用external属性,来告诉rollup.js哪些是外部的类库。

       external 属性

       修改rollup.js的配置文件:

       重新打包,打开dist/bundle.js文件:

       这时我们看到the-answer已经是做为外部库被引入了。

       commonjs插件

       为什么需要commonjs插件

       rollup.js编译源码中的模块引用默认只支持 ES6+的模块方式import/export。然而大量的npm模块是基于CommonJS模块方式,这就导致了大量 npm模块不能直接编译使用。

       因此使得rollup.js编译支持npm模块和CommonJS模块方式的插件就应运而生:@rollup/plugin-commonjs。

       commonjs插件使用

       首先,安装该模块:

       然后修改rollup.config.js文件:

       babel插件

       为什么需要babel插件?

       我们在src目录下添加es6.js文件(⚠️ 这里我们使用了 es6 中的箭头函数):

       然后修改rollup.config.js配置文件:

       执行打包,可以看到dist/esBundle.js文件内容如下:

       可以看到箭头函数被保留下来,这样的代码在不支持ES6的环境下将无法运行。我们期望在rollup.js打包的过程中就能使用babel完成代码转换,因此我们需要babel插件。

       babel插件的使用

       首先,安装:

       同样修改配置文件rollup.config.js:

       然后打包,发现会出现报错:

       提示我们缺少@babel/core,因为@babel/core是babel的核心。我们来进行安装:

       再次执行打包,发现这次没有报错了,但是我们尝试打开dist/esBundle.js:

       可以发现箭头函数仍然存在,显然这是不正确的,说明我们的babel插件没有起到作用。这是为什么呢?

       原因是由于我们缺少.babelrc文件,添加该文件:

       我们看.babelrc配置了preset env,所以先安装这个插件:

       这次再次执行打包,我们打开dist/esBundle.js文件:

       可以看到箭头函数被转换为了function,jdqs指标源码说明babel插件正常工作。

       json插件

       为什么要使用json插件?

       在src目录下创建json.js文件:

       内容很简单,就是引入package.json,然后去打印author字段。

       修改rollup.config.js配置文件:

       执行打包,发现会发生如下报错:

       提示我们缺少@rollup/plugin-json插件来支持json文件。

       json插件的使用

       来安装该插件:

       同样修改下配置文件,将插件加入plugins数组即可。

       然后再次打包,发现打包成功了,我们打开生成的dist/jsonBundle目录:

       完美!!

       tree-shaking机制

       这里我们以最开始的src/index.js为例进行说明:

       修改上述文件:

       执行打包。打开dist/bundle.js文件:

       再次修改src/index.js文件:

       再次执行打包,打开打包文件:

       发现了什么?

       我们发现关于变量b的定义没有了,因为源码中并没有用到这个变量。这就是ES模块著名的tree-shaking机制,它动态地清除没有被使用过的代码,使得代码更加精简,从而可以使得我们的类库获得更快的加载速度。

       总结

       本文大致向大家介绍了什么是rollup以及如何快速上手rollup。文中提到的这些其实只是冰山一角,rollup能玩的东西还有很多,关于更多可以去 rollup 官网查询。

如何对 js 源代码进行压缩?

       在JavaScript的世界里,代码体积的精简犹如为网页加速插上了翅膀。代码压缩,一项不可或缺的优化技术,通过精简字符、移除冗余,让文件瘦身,提升加载速度和执行效率,实现网页性能的飞跃。下面,让我们深入探讨如何对JavaScript源代码进行这场华丽的瘦身之旅。

       1. 精简代码,从细节开始

       首先,删除无用的空白字符和注释,如同剔除代码中的杂物,让代码变得简洁。空格、换行、制表符和注释虽然不影响代码运行,但它们无疑在无形中增加了文件的体积。

       2. 简化命名,缩短路径

       接着,对变量和函数进行瘦身。冗长的名称可以被缩短,甚至用单字符代替,这在减小代码量上立竿见影。每个字符的节省都意味着加载时间的缩减。

       3. 检查并删除冗余

       使用静态代码分析工具,找出并移除未使用的代码片段,就像清理无用的冗余,让代码更加精炼。

       4. 代码混淆,隐藏秘密

       进一步,代码混淆技术让变量和函数名变得难以理解,既减小了体积,又增加了破解的难度。这一步,是保护代码安全与效率的双重保障。

       5. 简化表达,巧用缩写

       对于常见的字符串和表达式,使用缩写和简写,就像给代码语言瘦身,提升其执行效率。

       6. 内联与拆分,优化加载

       内联函数和脚本,减少HTTP请求,而代码拆分则允许按需加载,兼顾性能与用户体验的双重考量。

       7. 工具助力,一键压缩

       最后,借助专业的压缩工具如UglifyJS和JShaman Minify,它们自动执行上述步骤,将你的代码压缩到极致,释放出极致的性能潜力。

       例如,看看压缩前后的差异:未压缩的代码清晰易读,但体积较大。

       未压缩代码:

       // 这是一个示例函数 function exampleFunction(input) { var output = input * 2; return output; } // 调用示例函数 var result = exampleFunction(5); console.log(result);

       而经过JShaman Minify压缩后,代码变得难以直接阅读,但体积大幅度减小:

       function _e(input){ var _o=input*2;return _o;}var _r=_e(5);console.log(_r);

       总的来说,代码压缩是在开发和生产环境中不可或缺的一步。在保证代码可读性的同时,它为提升用户体验提供了有力支持。所以,下一次面对源代码时,别忘了为它穿上轻盈的压缩衣裳。

分钟快速精通rollup.js——Vue.js源码打包原理深度分析

       Vue.js源码打包基于rollup.js的API,流程大致可分为五步。首先将Vue.js源码clone到本地,安装依赖,然后通过build指令进行打包。打包成功后会在dist目录下创建打包文件。Vue.js还提供了另外两种打包方式:“build:ssr"和"build:weex”。

       Vue.js打包源码分析,Vue.js源码打包基于rollup.js的API,流程大致可分为五步,如下图所示:执行npm run build时,会从scripts/build.js开始执行。前5行分别导入了5个模块,这5个模块的用途在前置学习教程中已经详细过。第7行通过同步方法判断dist目录是否存在,如果不存在则通过同步方法创建dist目录。生成rollup配置,生成dist目录后,通过以下代码生成了rollup的配置文件。代码虽然只有短短一句,但是做了很多事情。首先它加载了scripts/config.js模块,然后调用其中的getAllBuilds()方法。接下来导入了scripts/alias.js模块,alias.js模块输出了一个对象,这个对象中定义了所有的别名及其对应的绝对路径。这个模块中定义了resolve()方法,用于生成绝对路径。

       Vue.js打包流程分析,Vue.js源码打包基于rollup.js的API,流程大致可分为五步,如下图所示:执行npm run build时,会从scripts/build.js开始执行。前5行分别导入了5个模块,这5个模块的用途在前置学习教程中已经详细过。第7行通过同步方法判断dist目录是否存在,如果不存在则通过同步方法创建dist目录。生成rollup配置,生成dist目录后,通过以下代码生成了rollup的配置文件。代码虽然只有短短一句,但是做了很多事情。首先它加载了scripts/config.js模块,然后调用其中的getAllBuilds()方法。接下来导入了scripts/alias.js模块,alias.js模块输出了一个对象,这个对象中定义了所有的别名及其对应的绝对路径。这个模块中定义了resolve()方法,用于生成绝对路径。

       Vue.js打包流程分析,Vue.js源码打包基于rollup.js的API,流程大致可分为五步,如下图所示:执行npm run build时,会从scripts/build.js开始执行。前5行分别导入了5个模块,这5个模块的用途在前置学习教程中已经详细过。第7行通过同步方法判断dist目录是否存在,如果不存在则通过同步方法创建dist目录。生成rollup配置,生成dist目录后,通过以下代码生成了rollup的配置文件。代码虽然只有短短一句,但是做了很多事情。首先它加载了scripts/config.js模块,然后调用其中的getAllBuilds()方法。接下来导入了scripts/alias.js模块,alias.js模块输出了一个对象,这个对象中定义了所有的别名及其对应的绝对路径。这个模块中定义了resolve()方法,用于生成绝对路径。

       Vue.js打包流程分析,Vue.js源码打包基于rollup.js的API,流程大致可分为五步,如下图所示:执行npm run build时,会从scripts/build.js开始执行。前5行分别导入了5个模块,这5个模块的用途在前置学习教程中已经详细过。第7行通过同步方法判断dist目录是否存在,如果不存在则通过同步方法创建dist目录。生成rollup配置,生成dist目录后,通过以下代码生成了rollup的配置文件。代码虽然只有短短一句,但是做了很多事情。首先它加载了scripts/config.js模块,然后调用其中的getAllBuilds()方法。接下来导入了scripts/alias.js模块,alias.js模块输出了一个对象,这个对象中定义了所有的别名及其对应的绝对路径。这个模块中定义了resolve()方法,用于生成绝对路径。

       Vue.js打包流程分析,Vue.js源码打包基于rollup.js的API,流程大致可分为五步,如下图所示:执行npm run build时,会从scripts/build.js开始执行。前5行分别导入了5个模块,这5个模块的用途在前置学习教程中已经详细过。第7行通过同步方法判断dist目录是否存在,如果不存在则通过同步方法创建dist目录。生成rollup配置,生成dist目录后,通过以下代码生成了rollup的配置文件。代码虽然只有短短一句,但是做了很多事情。首先它加载了scripts/config.js模块,然后调用其中的getAllBuilds()方法。接下来导入了scripts/alias.js模块,alias.js模块输出了一个对象,这个对象中定义了所有的别名及其对应的绝对路径。这个模块中定义了resolve()方法,用于生成绝对路径。

       Vue.js打包流程分析,Vue.js源码打包基于rollup.js的API,流程大致可分为五步,如下图所示:执行npm run build时,会从scripts/build.js开始执行。前5行分别导入了5个模块,这5个模块的用途在前置学习教程中已经详细过。第7行通过同步方法判断dist目录是否存在,如果不存在则通过同步方法创建dist目录。生成rollup配置,生成dist目录后,通过以下代码生成了rollup的配置文件。代码虽然只有短短一句,但是做了很多事情。首先它加载了scripts/config.js模块,然后调用其中的getAllBuilds()方法。接下来导入了scripts/alias.js模块,alias.js模块输出了一个对象,这个对象中定义了所有的别名及其对应的绝对路径。这个模块中定义了resolve()方法,用于生成绝对路径。

更多相关资讯请点击【百科】频道>>>