Gruntjs NPM vs.鲍尔vs.Browserify vs.吞咽vs.咕噜vs.网页包

Gruntjs NPM vs.鲍尔vs.Browserify vs.吞咽vs.咕噜vs.网页包,gruntjs,npm,gulp,bower,webpack,Gruntjs,Npm,Gulp,Bower,Webpack,我试图总结一下我对最流行的JavaScript包管理器、绑定器和任务运行器的了解。如果我错了,请纠正我: npm和bower是包管理器。他们只是下载依赖项,不知道如何自己构建项目。他们知道的是在获取所有依赖项后调用webpack/gulp/grunt bower类似于npm,但它构建了一个平坦的依赖树(不像npm那样递归地进行)。意思是npm获取每个依赖项的依赖项(可能多次获取相同的依赖项),而bower希望您手动包含子依赖项。有时,bower和npm分别用于前端和后端(因为每个兆字节在前端可

我试图总结一下我对最流行的JavaScript包管理器、绑定器和任务运行器的了解。如果我错了,请纠正我:

  • npm
    bower
    是包管理器。他们只是下载依赖项,不知道如何自己构建项目。他们知道的是在获取所有依赖项后调用
    webpack
    /
    gulp
    /
    grunt
  • bower
    类似于
    npm
    ,但它构建了一个平坦的依赖树(不像
    npm
    那样递归地进行)。意思是
    npm
    获取每个依赖项的依赖项(可能多次获取相同的依赖项),而
    bower
    希望您手动包含子依赖项。有时,
    bower
    npm
    分别用于前端和后端(因为每个兆字节在前端可能很重要)
  • grunt
    gulp
    是任务执行者,负责自动化所有可以自动化的事情(即编译CSS/Sass、优化图像、制作捆绑包并缩小/传输)
  • grunt
    gulp
    (类似于
    maven
    gradle
    或配置与代码)。Grunt基于配置单独的独立任务,每个任务打开/处理/关闭文件。Gulp需要更少的代码量,并且基于节点流,这允许它构建管道链(不重新打开同一文件),并使其速度更快
  • webpack
    webpack dev server
    )-对我来说,它是一个任务运行程序,可以热加载更改,让你忘记所有JS/CSS观察器
  • npm
    /
    bower
    +插件可能会取代任务运行程序。它们的能力经常是交叉的,因此如果你需要在
    npm
    +插件上使用
    gulp
    /
    grunt
    ,它们会有不同的含义。但对于复杂的任务,任务运行程序肯定更好(例如,“在每个构建创建包上,从ES6传输到ES5,在所有浏览器模拟器上运行,制作屏幕截图,并通过ftp部署到dropbox”)
  • browserify
    允许为浏览器打包节点模块
    browserify
    vs
    node
    require
    实际上是
问题:

  • 什么是
    webpack
    &
    webpack开发服务器
    ?官方文档说它是一个模块绑定器,但对我来说,它只是一个任务运行器。有什么区别
  • 您将在哪里使用
    browserify
    ?我们不能对node/ES6导入执行相同的操作吗
  • 您什么时候会在
    npm
    +插件上使用
    gulp
    /
    grunt
  • 当您需要使用组合时,请提供示例
  • 网页包装与浏览 Webpack和Browserify的工作基本相同,这就是处理要在目标环境中使用的代码(主要是浏览器,但也可以针对Node等其他环境)。这种处理的结果是一个或多个捆绑包适合目标环境的组合脚本

    例如,假设您编写了分成模块的ES6代码,并希望能够在浏览器中运行它。如果这些模块是节点模块,浏览器将无法理解它们,因为它们仅存在于节点环境中。ES6模块在像IE11这样的旧浏览器中也不能工作。此外,您可能使用了浏览器尚未实现的实验性语言功能(ES next建议),因此运行这样的脚本只会抛出错误。Webpack和Browserify等工具通过将这些代码转换为浏览器能够执行的格式来解决这些问题。除此之外,它们还可以对这些捆绑包应用各种各样的优化

    然而,Webpack和Browserify在许多方面有所不同,默认情况下Webpack提供了许多工具(例如代码拆分),而Browserify只能在下载插件后才能这样做,但使用这两种工具会产生非常相似的结果。这取决于个人喜好(网页包更时尚)。顺便说一句,Webpack不是一个任务运行程序,它只是文件的处理器(它通过所谓的加载程序和插件处理文件),它可以由任务运行程序运行(以及其他方式)


    网页包开发服务器 Webpack Dev Server提供了与Browsersync类似的解决方案,Browsersync是一种开发服务器,您可以在使用应用程序时快速部署应用程序,并立即验证开发进度,dev服务器在代码更改时自动刷新浏览器,甚至将更改的代码传播到浏览器,而无需重新加载所谓的热模块替换


    任务运行程序与NPM脚本 我一直在使用Gulp,因为它简洁易懂,但后来发现我根本不需要Gulp和Grunt。我所需要的一切都可以使用NPM脚本通过API运行第三方工具来完成在“咕噜”、“咕噜”或“NPM”脚本之间进行选择取决于您团队的品味和经验。

    虽然Gulp或Grunt中的任务即使对于不太熟悉JS的人来说也很容易阅读,但它是另一个需要学习的工具,我个人更喜欢缩小依赖关系,让事情变得简单。另一方面,将这些任务替换为NPM脚本和运行这些第三方工具的(可能是JS)脚本的组合(例如,为清理目的配置和运行节点脚本)可能更具挑战性。但在大多数情况下,这三者在结果上是相等的。


    例子 至于示例,我建议您看看这个,它向您展示了NPM和JS脚本的良好组合,涵盖了整个构建和部署过程。您可以在根文件夹中名为
    scripts
    的属性中的
    package.json
    中找到这些NPM脚本。在那里,您将主要遇到com
    const bs = Browsersync.create();  
    bs.init({
          ...(DEBUG ? {} : { notify: false, ui: false }),
    
          proxy: {
            target: host,
            middleware: [wpMiddleware, ...hotMiddlewares],
          },
    
          // no need to watch '*.js' here, webpack will take care of it for us,
          // including full page reloads if HMR won't work
          files: ['build/content/**/*.*'],
    }, resolve)
    
    gulp.task('bundle', function() {
      // bundling source files with some gulp plugins like gulp-webpack maybe
    });
    
    gulp.task('start', function() {
      // starting server and stuff
    });
    
    project root
    [node_modules] // default directory for dependencies
     -> dependency A
     -> dependency B
        [node_modules]
        -> dependency A
    
     -> dependency C
        [node_modules]
        -> dependency B
          [node_modules]
           -> dependency A
        -> dependency D
    
    project root
    [bower_components] // default directory for dependencies
     -> dependency A
     -> dependency B // needs A
     -> dependency C // needs B and D
     -> dependency D
    
    require(["package/myModule"], function(myModule) {
        myModule.foobar();
    });
    
    <script src=“app/require.js” data-main=“main.js” ></script>
    
    npm install -g –save-dev browserify
    
    browserify entry-point.js -o bundle-name.js
    
    npm install -g –save-dev webpack
    
    webpack ./entry-point.js bundle-name.js
    
    var $ = require('jquery');
    
    $('body').append("I've imported jQuery!");
    
    <script src="jspm_packages/system.js"></script>
    <script src="config.js"></script>
    <script>
      System.import("scripts/display.js");
    </script>
    
    npm install -g yo
    npm install --global generator-h5bp
    yo h5bp
    
    var gulp        = require('gulp'),
      minifyCSS     = require('gulp-minify-css'),
      sass          = require('gulp-sass'),
      browserify    = require('gulp-browserify'),
      uglify        = require('gulp-uglify'),
      rename        = require('gulp-rename'),
      jshint        = require('gulp-jshint'),
      jshintStyle   = require('jshint-stylish'),
      replace       = require('gulp-replace'),
      notify        = require('gulp-notify'),
    
    {
      "scripts": {
        "start": "npm http-server"
      },
      "devDependencies": {
        "http-server": "^0.10.0"
      }
    }