【ca88官方会员登录】前端创设工具的可比

原来的小说地址:https://survivejs.com/webpack/appendices/comparison/

原稿地址:https://survivejs.com/webpack/appendices/comparison/

在从前,是足以将你的剧本写在壹块。
时期壹度改变,未来将JavaScript代码分开来或然是一个复杂的行事。
随着单页应用程序(SPA)的兴起,那一个主题素材1度升迁。他们辅助于依附一些实用的系列(来减轻那么些难题)。

 

出于这么些原因,有三种安插来加载它们。您可以马上加载它们,或许思考供给它们时加载。Webpack支持广大这么的计谋。

在原先,是足以将您的本子写在1块。
年代早就更改,未来将JavaScript代码分开来或然是1个扑朔迷离的办事。
随着单页应用程序(SPA)的起来,那么些标题一度升任。他们帮忙于依附一些得力的系统(来消除这几个标题)。

Node和npm的风行,给它的包管理器提供了越来越多的利用条件。在npm推广在此之前,很难使用正视项。有一段时间,人们开拓出了前者特定的包管理器,但npm最后获得了打败。现在依据管理比之前更易于了,就算还必要战胜一些挑衅。

由于那几个原因,有三种计谋来加载它们。您能够及时加载它们,也许思索供给它们时加载。Webpack援救广大如此的宗旨。

任务运维程序与包装

野史上,已经有诸多营造筑工程具。
Make可能是最着名的,它依旧是2个使得的接纳。
专门的任务运转程序,如Grunt和居尔p,是专门为JavaScript开拓人士成立的。
通过npm提供的插件使得使时局维程序都有力而且可扩展。
以致可以接纳npm脚本作为职务运行程序。 这很宽泛,更加是webpack。

义务局维程序是高品位的皇皇工具。 它们允许你以跨平台模式进行操作。
当您要求将各类财富拼接在一道并生育时,难点就会开始。
出于此原因,存在能源整合程序,如Browserify,Brunch或webpack。

有1段时间,RequireJS相当受迎接。
它的宗旨是提供叁个异步模块的章程并创制在此之上。
AMD的格式在背后将会有更详实的介绍。
幸运的是,这么些标准早已碰着了,而且RequireJS仿佛是贰个很好的诱导。

Node和npm的风行,给它的包管理器提供了更加多的利用条件。在npm推广从前,很难使用依赖项。有1段时间,人们开垦出了前者特定的包管理器,但npm最终赢得了凯旋。现在依赖管理比原先更便于了,纵然还要求制伏一些挑衅。

Make

就好像壹玖八零年早期公布的那样,Make回去了。就算它是三个旧工具,但它照旧是不毫不相关系的。
Make允许你为各样目标编写单独的义务。
举例,您能够有例外的职务来创制生产构建,压缩JavaScript或运维测试。
您能够在多数任何工具中找到同样的秘诀。

就算Make首要用于C项目,但它并不以任何措施与C绑定。 JamesCoglan详细商议了怎么着运用在JavaScript中使用马克
看一下底下的詹姆斯帖子里介绍的压缩代码的章程:

Makefile

PATH  := node_modules/.bin:$(PATH)
SHELL := /bin/bash

source_files := $(wildcard lib/*.coffee)
build_files  := $(source_files:%.coffee=build/%.js)
app_bundle   := build/app.js
spec_coffee  := $(wildcard spec/*.coffee)
spec_js      := $(spec_coffee:%.coffee=build/%.js)

libraries    := vendor/jquery.js

.PHONY: all clean test

all: $(app_bundle)

build/%.js: %.coffee
    coffee -co $(dir $@) $<

$(app_bundle): $(libraries) $(build_files)
    uglifyjs -cmo $@ $^

test: $(app_bundle) $(spec_js)
    phantomjs phantom.js

clean:
    rm -rf build

采纳Make,您可以采纳Make-specific语法和顶峰命令为你的任务建模,使其得以与webpack集成。

 

RequireJS

RequireJS恐怕是率先个变为真正受招待的台本加载程序。
它首先科学地引进了模块化JavaScript。 其最大的吸重力是AMD。
它引进了二个定义包装器:

define(['./MyModule.js'], function (MyModule) {
  return function() {}; // 模块入口
});

// 或者
define(['./MyModule.js'], function (MyModule) {
  return {
    hello: function() {...}, // 导出为模块函数
  };
});

附带说一下,能够在包装器中采纳require:

define(['require'], function (require) {
  var MyModule = require('./MyModule.js');

  return function() {...};
});

后1种艺术更简短一点。 但您依旧会蒙受多余的代码。
ES6等正规消除了那么些难题。

小心:Jamund
福开森撰写了一篇关于怎么样从RequireJS移植到webpack的美观博客种类。

职责运维程序与包装

npm脚本作为自动化营造筑工程具

不畏npm
CLI(命令行分界面)并非首要用以作为天职运维的程序,由于有package.json的脚本字段是之造成可能。
思索上边的例子:

package.json

"scripts": {
  "stats": "webpack --env production --json > stats.json",
  "start": "webpack-dev-server --env development",
  "deploy": "gh-pages -d build",
  "build": "webpack --env production"
},

这几个本子能够选取npm run列出,然后使用npm run <script>实践。
您还是能动用诸如test:watch那样的约定命名空间。
那种格局能够使它保持跨平台。

替代它使用rm -rf,您或然更希望利用诸如rimraf等实用程序。
在此间能够调用别的自动化营造筑工程具来掩藏你正在选择的切实可行细节。
那样,您能够在有限协助分界面一样的动静下使用重构工具。

野史上,已经有大多塑造筑工程具。
Make或然是最着名的,它依然是三个得力的精选。
专门的天职运维程序,如Grunt和居尔p,是特地为JavaScript开辟人士创设的。
通过npm提供的插件使得使时局转程序都庞大而且可增添。
乃至能够应用npm脚本作为义务运维程序。 这很分布,特别是webpack。

Grunt

Grunt在前端开拓人士中是最受应接的。它的插件架构有助于它的盛行,插件本人平日是纵横交叉的,由此,当配置扩充时,很难知晓到底发生了什么样。

以下是Grunt文书档案的演示
在此布局中,您定义2个linting和一个侦查职务。
当watch使时局转时,它也会触发lint职务。
那样,当你运营Grunt时,您能够在编排源代码时在终极中实时发出警示。

Gruntfile.js

module.exports = (grunt) => {
  grunt.initConfig({
    lint: {
      files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
      options: {
        globals: {
          jQuery: true,
        },
      },
    },
    watch: {
      files: ['<%= lint.files %>'],
      tasks: ['lint'],
    },
  });

  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-watch');

  grunt.registerTask('default', ['lint']);
};

在执行中,您将有广大小的任务用于特定目的,比如营造项目。
Grunt有用的八个首要部分是它隐藏了汪洋的底细。

从远来讲,那只怕会有标题。从Grunt的创设进度,你很难知晓它引擎职业的具体景况。

注意:grunt-webpack插件允许你在Grunt遇到中选拔webpack,同时将选取阶段进步到Webpack。

任务运维程序是高品位的光辉工具。 它们允许你以跨平台情势实行操作。
当您必要将种种能源拼接在一同并生育时,难点就会早先。
出于此原因,存在能源整合程序,如Browserify,Brunch或webpack。

Gulp

Gulp选拔两样的办法。
您不需求借助各类插件的配置,而是管理实际的代码。
Gulp建立在管道概念之上。 假如你熟习Unix,那里也是均等的。
您要求依照以下概念:

  • 发源相配文件。
  • 对来自实施操作的过滤器(举个例子,转换为JavaScript)
  • 接受模块库(比如,您的营造目录)在哪个地方管理营造结果。

那是2个示范的居尔pfile,能够让您更加好地询问从体系的README中拿走的不二秘籍。
它被缩写为贰个接口:

Gulpfile.js

const gulp = require('gulp');
const coffee = require('gulp-coffee');
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const sourcemaps = require('gulp-sourcemaps');
const del = require('del');

const paths = {
  scripts: ['client/js/**/*.coffee', '!client/external/**/*.coffee']
};

// 并不是所有的任务都需要使用流
// 一个gulpfile是另一个节点程序
// 你也可以在npm上使用所有的软件包
gulp.task(
  'clean',
  del.bind(null, ['build']
);

gulp.task(
  'scripts',
  ['clean'],
  () => (
    // 压缩和复制所有的JavaScript(除了供应商脚本)
    // 源代码一路下来
    gulp.src(paths.scripts)
      // 管道内
      .pipe(sourcemaps.init())
        .pipe(coffee())
        .pipe(uglify())
        .pipe(concat('all.min.js'))
      .pipe(sourcemaps.write())
      .pipe(gulp.dest('build/js'))
  )
);

// 文件更改时重新运行任务
gulp.task(
  'watch',
  gulp.watch.bind(null, paths.scripts, ['scripts'])
);

// 默认任务(从CLI运行`gulp`时调用)
gulp.task(
  'default',
  ['watch', 'scripts']
);

由于配置是代码,假使遇到麻烦,您总是可以将其除去。
您能够将长存的节点包作为居尔p插件,等等。
与Grunt相比较,您能够更通晓地打听发生了何等。
即便如此,你照旧最后写了多数模板作为闲时义务。 那正是翻新的格局。

注意:webpack-stream允许你在居尔p情状中选用webpack。

注意:Fly是与居尔p类似的工具。
它借助于ES6爆发器。

有一段时间,RequireJS备受应接。
它的中坚是提供三个异步模块的办法并建立在此之上。
英特尔的格式在背后将会有更详细的牵线。
幸运的是,这几个规范早已境遇了,而且RequireJS就好像是三个很好的开导。

Browserify

管理JavaScript模块一贯是1个标题。 js语言本人未有模块的定义,直到ES6。
Ergo,那个语言在90时期被用在浏览器意况中。
已经提议了席卷AMD在内的各类化解方案。

Browserify是模块难点的多少个消除方案。
它能够将CommonJS模块捆绑在同步。
您能够将其与居尔p挂钩,您能够找到极小的转移工具,使您能够超过基本用法。
举个例子,watchify提供了二个在付出空闲的干活之间为您创立捆绑包的文书监视器。

Browserify生态系统由大多小模块组合。 那样,Browserify就适合Unix的观念。
Browserify比webpack更易于选用,实际上它是两个很好的代替品。

注意:Splittable是叁个Browserify包装器,允许代码分割,协理ES6开箱即用,Tree
shaking等等。

 

JSPM

使用JSPM与原先的工具一丈差九尺。
它附带了三个谈得来的命令行工具,用于将新的软件包安装到品种中,创造3个生产包,等等。
它协理SystemJS插件,能够将各样格式加载到项目中。

Make

Brunch

与居尔p相比较,Brunch在越来越高档次的空洞上运营。
它利用类似于webpack的宣示方法。
以示范为例,您能够思念从Brunch网址改编以下配置:

module.exports = {
  files: {
    javascripts: {
      joinTo: {
        'vendor.js': /^(?!app)/,
        'app.js': /^app/,
      },
    },
    stylesheets: {
      joinTo: 'app.css',
    },
  },
  plugins: {
    babel: {
      presets: ['es2015', 'react'],
    },
    postcss: {
      processors: [require('autoprefixer')],
    },
  },
};

Brunch包蕴像brunch new, brunch watch –server, and brunch build
–production。 它包涵了累累创制性的效应,能够运用插件扩大。

只顾:Brunch有三个实验性的热模块重新加载程序

就如197七年终期公布的那么,Make回到了。固然它是3个旧工具,但它依旧是有关的。
Make允许你为各类目的编写单独的职分。
比如,您能够有两样的天职来创制生产创设,压缩JavaScript或运营测试。
您能够在众多任何工具中找到一样的方式。

Webpack

您能够说Webpack动用比Browserify更单一的章程。
Browserify由多个小工具组成,而Webpack提供了四个宗旨,它提供了大多创立性的效劳。

Webpack大旨能够应用一定的加载程序和插件举行扩充。
它能够调节什么缓和模块,使您可以调解你的创设以同盟特定情景和解决不能寻常运维的软件包。

与其他工具比较,Webpack具备开首复杂性,但因而其相近的效应集成能够弥补这一点。
那是1个急需耐心的高档工具。
但是尽管理解了幕后的基本思路,webpack就变得很强劲。

尽管Make首要用于C项目,但它并不以任何措施与C绑定。 JamesCoglan详细争辨了如何行使在JavaScript中接纳马克
看一下上边的詹姆士帖子里介绍的削减代码的点子:

其余选项

你能够找到更加多替代品,如下所列:

  • pundle鼓吹自个儿看做下一代打包工具,并尤其注意其本性。
  • Rollup一言九鼎关怀打包es6的代码。Tree
    shaking是其卖点之壹。您能够利用Rollup与webpack的加载程序rollup-loader
  • AssetGraph动用完全两样的格局,建立在HTML语义之上,使其成为超链接分析结构分析的卓越选取。webpack-assetgraph-plugin将webpack和AssetGraph结合在一齐。
  • FuseBox是3个只顾于速度的包裹工具。
    它利用零配置方式,意在开箱即用。
  • StealJS是3个依据加载器,1个瞩目于质量和易用性的构建筑工程具。
  • Flipbox将五个捆绑打包在1个合并的分界面后边。

Makefile

结语

正史上业已有众多JavaScript的创设工具。
每一种人都希图以投机的办法缓和一个一定的主题材料。
这个标准已经起来迎头超越,基本语义的须要也更加少了。
相反,工具得以在越来越高等级次序上竞争,并推进越来越好的用户体验。
平常,您可以同步利用多少个单身的减轻方案。

总的看:

  • 自动化营造筑工程具和包裹工具化解不一样的标题。
    您能够通过两岸实现类似的结果,但经常最棒将它们一同行使来互相补充。
  • 较早的工具(如Make或RequireJS)还是具有影响力,尽管它们在前端开采中不及往年那样受应接。
  • Bundinner如Browserify或webpack化解了三个重大的主题素材,并援助您管理复杂的Web应用程序。
  • 局地新生技艺从不一样的角度消除难题。
    有时候它们创立在别的工具之上,有时它们能够同步行使。

原博客备份

PATH  := node_modules/.bin:$(PATH)
SHELL := /bin/bash

source_files := $(wildcard lib/*.coffee)
build_files  := $(source_files:%.coffee=build/%.js)
app_bundle   := build/app.js
spec_coffee  := $(wildcard spec/*.coffee)
spec_js      := $(spec_coffee:%.coffee=build/%.js)

libraries    := vendor/jquery.js

.PHONY: all clean test

all: $(app_bundle)

build/%.js: %.coffee
    coffee -co $(dir $@) $<

$(app_bundle): $(libraries) $(build_files)
    uglifyjs -cmo $@ $^

test: $(app_bundle) $(spec_js)
    phantomjs phantom.js

clean:
    rm -rf build

应用Make,您能够应用Make-specific语法和顶峰命令为你的职分建立模型,使其得以与webpack集成。

 

RequireJS

RequireJS兴许是首先个产生真正受应接的台本加载程序。
它首先科学地引进了模块化JavaScript。 其最大的吸重力是英特尔。
它引进了八个定义包装器:

define(['./MyModule.js'], function (MyModule) {
  return function() {}; // 模块入口
});

// 或者
define(['./MyModule.js'], function (MyModule) {
  return {
    hello: function() {...}, // 导出为模块函数
  };
});

顺便说一下,能够在包装器中使用require:

define(['require'], function (require) {
  var MyModule = require('./MyModule.js');

  return function() {...};
});

 后1种格局更简短一点。 但您依然会碰着多余的代码。
ES陆等专门的学业化解了那一个题目。

在意:Jamund
Ferguson撰写了一篇有关如何从RequireJS移植到webpack的完美博客连串。

 

ca88官方会员登录,npm脚本作为自动化营造筑工程具

不畏npm
CLI(命令行分界面)并非首要用以作为天职运营的顺序,由于有package.json的脚本字段是之成为也许。
挂念上面包车型客车例子:

package.json

"scripts": {
  "stats": "webpack --env production --json > stats.json",
  "start": "webpack-dev-server --env development",
  "deploy": "gh-pages -d build",
  "build": "webpack --env production"
},

那些本子能够接纳npm run列出,然后使用npm run <script>试行。
您仍是能够应用诸如test:watch那样的预定命名空间。
那种措施能够使它保持跨平台。

取代他使用rm -rf,您也许更希望利用诸如rimraf等实用程序。
在此处能够调用其余自动化营造筑工程具来掩藏你正在选拔的现实性细节。
那样,您能够在保持分界面同样的事态下利用重构工具。

 

Grunt

ca88官方会员登录 1

 

Grunt在前端开采职员中是最受应接的。它的插件架构有助于它的风靡,插件本人平时是繁体的,由此,当配置扩大时,很难懂获得底暴发了如何。

以下是Grunt文书档案的言传身教
在此布局中,您定义三个linting和四个观测义务。
当watch使时局转时,它也会触发lint义务。
那样,当您运维Grunt时,您能够在编写制定源代码时在终端中实时发出警示。

Gruntfile.js

module.exports = (grunt) => {
  grunt.initConfig({
    lint: {
      files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
      options: {
        globals: {
          jQuery: true,
        },
      },
    },
    watch: {
      files: ['<%= lint.files %>'],
      tasks: ['lint'],
    },
  });

  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-watch');

  grunt.registerTask('default', ['lint']);
};

在奉行中,您将有诸多小的职分用于特定目标,举例营造项目。
Grunt有用的3个珍视部分是它隐藏了汪洋的底细。

从远来讲,那说不定会万分。从Grunt的营造进度,你很难精晓它引擎工作的具体意况。

注意:grunt-webpack插件允许你在Grunt情况中接纳webpack,同时将利用阶段升高到Webpack。

 

Gulp

ca88官方会员登录 2

Gulp使用区别的主意。
您不要求依附各种插件的布局,而是处理实际的代码。
居尔p建立在管道概念之上。 借使您纯熟Unix,那里也是如出一辙的。
您供给听从以下概念:

  • 来源匹配文件。
  • 对来自试行操作的过滤器(举例,调换为JavaScript)
  •  接收模块库(举个例子,您的营造目录)在何地管理创设结果。

那是五个示范的居尔pfile,能够让你越来越好地询问从品类的README中得到的格局。
它被缩写为二个接口:

Gulpfile.js

const gulp = require('gulp');
const coffee = require('gulp-coffee');
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const sourcemaps = require('gulp-sourcemaps');
const del = require('del');

const paths = {
  scripts: ['client/js/**/*.coffee', '!client/external/**/*.coffee']
};

// 并不是所有的任务都需要使用流
// 一个gulpfile是另一个节点程序
// 你也可以在npm上使用所有的软件包
gulp.task(
  'clean',
  del.bind(null, ['build']
);

gulp.task(
  'scripts',
  ['clean'],
  () => (
    // 压缩和复制所有的JavaScript(除了供应商脚本)
    // 源代码一路下来
    gulp.src(paths.scripts)
      // 管道内
      .pipe(sourcemaps.init())
        .pipe(coffee())
        .pipe(uglify())
        .pipe(concat('all.min.js'))
      .pipe(sourcemaps.write())
      .pipe(gulp.dest('build/js'))
  )
);

// 文件更改时重新运行任务
gulp.task(
  'watch',
  gulp.watch.bind(null, paths.scripts, ['scripts'])
);

// 默认任务(从CLI运行`gulp`时调用)
gulp.task(
  'default',
  ['watch', 'scripts']
);

是因为配置是代码,倘诺蒙受麻烦,您总是能够将其除去。
您能够将长存的节点包作为居尔p插件,等等。
与Grunt比较,您能够更明了地打听爆发了什么样。
就算如此,你照旧最后写了无数模板作为闲时任务。 那正是翻新的法子。

注意:webpack-stream允许你在居尔p情状中动用webpack。

注意:Fly是与居尔p类似的工具。
它凭仗于ES陆产生器。

 

 

Browserify

ca88官方会员登录 3

管理JavaScript模块一向是3个主题素材。 js语言自个儿未有模块的定义,直到ES陆。
Ergo,这一个语言在90年份被用在浏览器境况中。
已经提议了包含AMD在内的各个消除方案。

Browserify是模块难题的二个缓慢解决方案。
它可以将CommonJS模块捆绑在同步。
您能够将其与Gulp挂钩,您能够找到相当小的转移工具,使您能够超过基本用法。
举个例子,watchify提供了多少个在付出空闲的做事之间为你创制捆绑包的文本监视器。

Browserify生态系统由众多小模块组成。 那样,Browserify就符合Unix的视角。
Browserify比webpack更便于接纳,实际上它是一个很好的代替品。

注意:Splittable是1个Browserify包装器,允许代码分割,扶助ES陆开箱即用,Tree
shaking等等。

 

JSPM

ca88官方会员登录 4

使用JSPM与原先的工具天壤之隔。
它附带了一个和睦的命令行工具,用于将新的软件包安装到品种中,创设三个生产包,等等。
它补助SystemJS插件,能够将各类格式加载到项目中。

 

Brunch

ca88官方会员登录 5

与居尔p相比较,Brunch在越来越高档期的顺序的抽象上运维。
它使用类似于webpack的申明方法。
以示范为例,您能够思索从Brunch网址改编以下配置:

module.exports = {
  files: {
    javascripts: {
      joinTo: {
        'vendor.js': /^(?!app)/,
        'app.js': /^app/,
      },
    },
    stylesheets: {
      joinTo: 'app.css',
    },
  },
  plugins: {
    babel: {
      presets: ['es2015', 'react'],
    },
    postcss: {
      processors: [require('autoprefixer')],
    },
  },
};

Brunch包罗像brunch new, brunch watch –server, and brunch build
–production。 它包含了广大创立性的作用,能够接纳插件扩大。

留意:Brunch有二个试验性的热模块重新加载程序

 

Webpack

ca88官方会员登录 6

您能够说Webpack使用比Browserify更单一的章程。
Browserify由多少个小工具组成,而Webpack提供了贰个主干,它提供了多数创设性的成效。

Webpack主题能够动用一定的加载程序和插件实行扩大。
它能够决定什么化解模块,使您能够调节你的构建以同盟特定情景和减轻不可能平常运维的软件包。

与此外工具比较,Webpack具备起头复杂性,但经过其大规模的作用集成能够弥补那一点。
那是多个内需耐心的高等工具。
不过尽管精晓了幕后的基本思路,webpack就变得很强劲。

 

别的选项

您能够找到愈多代替品,如下所列:

  • pundle宣传本人视作下一代打包工具,并越发注意其性质。
  • Rollup关键关怀打包es陆的代码。Tree
    shaking是其卖点之一。您可以选用Rollup与webpack的加载程序rollup-loader
  • AssetGraph动用完全两样的法子,建立在HTML语义之上,使其成为超链接分析布局解析的杰出选取。webpack-assetgraph-plugin将webpack和AssetGraph结合在联合具名。
  • FuseBox是四个在意于速度的包裹工具。
    它选拔零配置格局,意在开箱即用。
  • StealJS是三个借助加载器,一个注意于品质和易用性的塑造筑工程具。
  • Flipbox将四个捆绑打包在1个联结的界日前边。

 

结语

正史樱笋时经有不少JavaScript的创设筑工程具。
每种人都图谋以友好的秘籍消除一个特定的标题。
那些专门的学问早已上马迎头超越,基本语义的渴求也更加少了。
相反,工具得以在更加高档案的次序上竞争,并有助于更加好的用户体验。
常常,您能够联手行使多少个单身的减轻方案。

看来:

  • 自动化创设筑工程具和包裹工具化解不相同的标题。
    您能够经过两岸完成类似的结果,但平时最佳将它们一同使用来相互补充。
  • 较早的工具(如Make或RequireJS)依然具备影响力,固然它们在前端开发中比不上往年那么受迎接。
  • Bundinner如Browserify或webpack化解了3个最首要的标题,并支援您管理复杂的Web应用程序。
  • 有个别新兴技艺从不相同的角度消除难点。
    有时候它们创造在别的工具之上,有时它们得以一同行使。

 

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图