• 前端自动化构建-Gulp实现前端插件开发


    通过Gulp可以开发些前端小插件,像大家常用到的jQuery,网上下载时,会有jquery.js和jquery.min.js两种文件,这些是如何实现的。里面有很多小模块,如何通过import和export来将这些模块合并到一个文件中,该篇会详细讲述下。

    一、创建项目目录

    1.1 创建目录test

    在电脑上盘符中,创建目录test

    1.2 初始化项目

    进入test目录,执行cmd命令行,如下:

    npm init

     执行后,依次填写相应内容即可,如下所示:

    1. This utility will walk you through creating a package.json file.
    2. It only covers the most common items, and tries to guess sensible defaults.
    3. See `npm help init` for definitive documentation on these fields
    4. and exactly what they do.
    5. Use `npm install ` afterwards to install a package and
    6. save it as a dependency in the package.json file.
    7. Press ^C at any time to quit.
    8. package name: (test)
    9. version: (1.0.0)
    10. description:
    11. entry point: (index.js)
    12. test command:
    13. git repository:
    14. keywords:
    15. author:
    16. license: (ISC)
    17. About to write to D:\workspace\web\gulp\test\package.json:
    18. {
    19. "name": "test",
    20. "version": "1.0.0",
    21. "description": "",
    22. "main": "index.js",
    23. "scripts": {
    24. "test": "echo \"Error: no test specified\" && exit 1"
    25. },
    26. "author": "",
    27. "license": "ISC"
    28. }
    29. Is this OK? (yes)

    回车后,test目录中会生成package.json文件。

    二、gulp安装

    全局安装,命令行:

    npm install --global gulp@4

    gulp本地依赖安装,命令行:

    npm install --save-dev gulp@4

    执行后,目录中会生成node_modules目录,如下图:

    注意:这里使用的是gulp 4.0.2版本,不同版本对依赖包中组合插件版本要求不同,如果版本不同步,会报错,无法正常运行。

    三、gulpfile.js文件创建

    在test目录中创建gulpfile.js文件,代码如下:

    1. var gulp = require('gulp');
    2. gulp.task('uglify', function(){
    3. console.log('uglify');
    4. });

    这是cmd命令执行如下:

    1. $ gulp uglify
    2. [17:25:37] Using gulpfile D:\workspace\web\gulp\test\gulpfile.js
    3. [17:25:37] Starting 'uglify'...
    4. uglify

    可以正常输出console内容了。

    四、babel转译及文件合并

    由于babel只是转译语法,所在转译为浏览器可用的代码,合并文件还需要browserify。使用browserify,注意版本号,如果出错可降低版本试试。

    第一步:在test目录中, 创建src存放源码文件,并新建index.js,及以库包目录lib,如下图:

    第二步:另外在test目录中,创建dist目录,用于存储生成文件。

    现在test目录结构,如下图:

     4.1 index.js

    在index.js文件中,先简单写个基础框架,代码如下:

    1. (function($){
    2. })(jQuery);

    4.2 gulpfile.js

    在gulpfile.js进程中,添加如下代码:

    1. var gulp = require('gulp');
    2. gulp.task('uglify', function(){
    3. return gulp.src("src/index.js")
    4. .pipe(gulp.dest("dist"))
    5. });

    cmd执行代码如下:

    1. $ gulp uglify
    2. [17:38:48] Using gulpfile D:\workspace\web\gulp\test\gulpfile.js
    3. [17:38:48] Starting 'uglify'...
    4. [17:38:48] Finished 'uglify' after 18 ms

    执行完成后,dist目录中,则会生成对应文件了。

    4.3 转义相关插件安装

    代码如下:

    1. //babel编译es6(默认安装为8.0,不太稳定)
    2. npm install --save-dev gulp-babel@7 babel-core babel-preset-env babel-preset-es2015
    3. //文件打包组件
    4. npm install --save-dev browserify@14
    5. //支持import from export解析
    6. npm install --save-dev babelify@8
    7. //stream流和buffer流处理
    8. npm install --save-dev vinyl-source-stream vinyl-buffer

    此时,gulpfile.js中的uglify进程,进行改造下,即可生成文件了,代码如下:

    1. var gulp = require('gulp');
    2. var babelify = require('babelify');
    3. var browserify = require('browserify');
    4. var source = require('vinyl-source-stream');
    5. var buffer = require('vinyl-buffer');
    6. gulp.task('uglify', function(){
    7. return browserify({
    8. entries: 'src/index.js',
    9. debug: true
    10. })
    11. .transform(babelify, {presets: ["es2015"], extensions: [".js"]})
    12. .bundle()
    13. .pipe(
    14. source('app.js')
    15. )
    16. .pipe(
    17. buffer()
    18. )
    19. .pipe(gulp.dest("dist"))
    20. });

    执行代码如下:

    1. $ gulp uglify
    2. [18:21:17] Using gulpfile D:\workspace\web\gulp\test\gulpfile.js
    3. [18:21:17] Starting 'uglify'...
    4. [18:21:17] Finished 'uglify' after 126 ms

    此时,dist目录中,则会生成app.js文件。

    4.4 压缩代码

    对生成的app.js进行压缩处理,生成app.min.js文件。

    安装gulp-uglifyjs,代码如下:

    npm install --save-dev gulp-uglifyjs
    

    此时对gulpfile.js进行改造下即可,代码如下:

    1. var gulp = require('gulp');
    2. var babelify = require('babelify');
    3. var browserify = require('browserify');
    4. var source = require('vinyl-source-stream');
    5. var buffer = require('vinyl-buffer');
    6. var uglify = require('gulp-uglifyjs');
    7. gulp.task('uglify', function(){
    8. return browserify({
    9. entries: 'src/index.js',
    10. debug: true
    11. })
    12. .transform(babelify, {presets: ["es2015"], extensions: [".js"]})
    13. .bundle()
    14. .pipe(
    15. source('app.js')
    16. )
    17. .pipe(
    18. buffer()
    19. )
    20. .pipe(gulp.dest("dist"))
    21. .pipe(
    22. uglify('app.min.js', {})
    23. )
    24. .pipe(gulp.dest("dist"))
    25. });

    执行代码如下:

    1. $ gulp uglify
    2. [18:30:18] Using gulpfile D:\workspace\web\gulp\test\gulpfile.js
    3. [18:30:18] Starting 'uglify'...
    4. [18:30:18] Finished 'uglify' after 148 ms

    此时,dist目录中,则会生成app.js和app.min.js两个文件了。

    4.5 import和export

    我们在src/lib目录中,创建tabs.js和dialog.js两个文件,代码分别如下:

    dialog.js

    1. const Dialog = {
    2. name: "这是一个弹框组件"
    3. }
    4. export default Dialog

    tabs.js

    1. const Tabs = {
    2. name: "这是一个Tab组件"
    3. }
    4. export default Tabs

    index.js

    1. import Dialog from './lib/dialog.js'
    2. import Tabs from './lib/tabs.js'
    3. (function($){
    4. })(jQuery);

    执行代码如下:

    1. $ gulp uglify
    2. [18:36:17] Using gulpfile D:\workspace\web\gulp\test\gulpfile.js
    3. [18:36:17] Starting 'uglify'...
    4. [18:36:18] Finished 'uglify' after 190 ms

    此时,生成文件中,则组合了dialog和tabs两个文件中代码了,如下图:

    五、总结

    通过以上流程,已经可以正常开发前端插件了,大家也可在此基础上,再进行优化。

  • 相关阅读:
    Efficient Join Order Selection Learning with Graph-based Representation
    将pyc文件转换为py文件
    Spring中Bean的作用域
    "科来杯"第十届山东省大学生网络安全技能大赛决赛复现WP
    分布式消息队列(MQ)的应用场景
    Apollo 应用与源码分析:Apollo工程概述与AUTOSAR架构
    “/home/test/cc/bk-server/docker-compose.yml“ docker配置
    STM32物联网项目-低功耗模式
    打造线上体育培训新体验:教育系统助力培训机构实现高效管理
    Elasticsearch 如何实现时间差查询?
  • 原文地址:https://blog.csdn.net/jiciqiang/article/details/126874970