前端模块管理器简介

模块化结构已经成为网站开发的主流。

制作网站的主要工作,不再是自己编写各种功能,而是如何将各种不同的模块组合在一起。

浏览器本身并不提供模块管理的机制,为了调用各个模块,有时不得不在网页中,加入一大堆script标签。这样就使得网页体积臃肿,难以维护,还产生大量的HTTP请求,拖慢显示速度,影响用户体验。

为了解决这个问题,前端的模块管理器(package management)应运而生。它可以轻松管理各种JavaScript脚本的依赖关系,自动加载各个模块,使得网页结构清晰合理。不夸张地说,将来所有的前端JavaScript项目,应该都会采用这种方式开发。

最早也是最有名的前端模块管理器,非RequireJS莫属。它采用AMD格式,异步加载各种模块。具体的用法,可以参考我写的教程。Require.js的问题在于各种参数设置过于繁琐,不容易学习,很难完全掌握。而且,实际应用中,往往还需要在服务器端,将所有模块合并后,再统一加载,这多出了很多工作量。

今天,我介绍另外四种前端模块管理器:BowerBrowserifyComponentDuo。它们各自都有鲜明的特点,很好地弥补了Require.js的缺陷,是前端开发的利器。

需要说明的是,这篇文章并不是这四种模块管理器的教程。我只是想用最简单的例子,说明它们是干什么用的,使得读者有一个大致的印象,知道某一种工作有特定的工具可以完成。详细的用法,还需要参考它们各自的文档。

Bower

Bower的主要作用是,为模块的安装、升级和删除,提供一种统一的、可维护的管理模式。

首先,安装Bower。

1  $ npm install -g bower

然后,使用bower install命令安装各种模块。下面是一些例子。

# 模块的名称
  $ bower install jquery
  # github用户名/项目名
  $ bower install jquery/jquery
  # git代码仓库地址
  $ bower install git://github.com/user/package.git
  # 模块网址
  $ bower install http://example.com/script.js

所谓"安装",就是将该模块(以及其依赖的模块)下载到当前目录的bower_components子目录中。下载后,就可以直接插入网页。

 <script src="/bower_componets/jquery/dist/jquery.min.js">

bower update命令用于更新模块。

 $ bower update jquery

如果不给出模块的名称,则更新所有模块。

bower uninstall命令用于卸载模块。

 $ bower uninstall jquery

注意,默认情况下,会连所依赖的模块一起卸载。比如,如果卸载jquery-ui,会连jquery一起卸载,除非还有别的模块依赖jquery。

Browserify

Browserify本身不是模块管理器,只是让服务器端的CommonJS格式的模块可以运行在浏览器端。这意味着通过它,我们可以使用Node.js的npm模块管理器。所以,实际上,它等于间接为浏览器提供了npm的功能。

首先,安装Browserify。

 $ npm install -g browserify

然后,编写一个服务器端脚本。

var uniq = require(‘uniq‘);
  var nums = [ 5, 2, 1, 3, 2, 5, 4, 2, 0, 1 ];
  console.log(uniq(nums));

上面代码中uniq模块是CommonJS格式,无法在浏览器中运行。这时,Browserify就登场了,将上面代码编译为浏览器脚本。

 $ browserify robot.js > bundle.js

生成的bundle.js可以直接插入网页。

<script src="bundle.js"></script>

Browserify编译的时候,会将脚本所依赖的模块一起编译进去。这意味着,它可以将多个模块合并成一个文件。

Component

Component是Express框架的作者TJ Holowaychuk开发的模块管理器。它的基本思想,是将网页所需要的各种资源(脚本、样式表、图片、字体等)编译后,放到同一个目录中(默认是build目录)。

首先,安装Component。

$ npm install -g [email protected]

上面代码之所以需要指定Component的版本,是因为1.0版还没有正式发布。

然后,在项目根目录下,新建一个index.html。

<!DOCTYPE html>
  <html>
    <head>
      <title>Getting Started with Component</title>
      <link rel="stylesheet" href="build/build.css">
    </head>
    <body>
      <h1>Getting Started with Component</h1>
      <p class="blink">Woo!</p>
      <script src="build/build.js"></script>
    </body>
</html>

上面代码中的build.css和build.js,就是Component所要生成的目标文件。

接着,在项目根目录下,新建一个component.json文件,作为项目的配置文件。

 {
    "name": "getting-started-with-component",
    "dependencies": {
      "necolas/normalize.css": "^3.0.0"
    },
    "scripts": ["index.js"],
    "styles": ["index.css"]
  }

上面代码中,指定JavaScript脚本和样式表的原始文件是index.js和index.css两个文件,并且样式表依赖normalize模块(不低于3.0.0版本,但不高于4.0版本)。这里需要注意,Component模块的格式是"github用户名/项目名"。

最后,运行component build命令编译文件。

 $ component build
     installed : necolas/[email protected] in 267ms
         build : resolved in 1221ms
         build : files in 12ms
         build : build/build.js in 76ms - 1kb
         build : build/build.css in 80ms - 7kb

在编译的时候,Component自动使用autoprefixer为CSS属性加上浏览器前缀。

目前,Component似乎处于停止开发的状态,代码仓库已经将近半年没有变动过了,官方也推荐优先使用接下来介绍的Duo。

Duo

Duo是在Component的基础上开发的,语法和配置文件基本通用,并且借鉴了Browserify和Go语言的一些特点,相当地强大和好用。

首先,安装Duo。

 $ npm install -g duo

然后,编写一个本地文件index.js。

      var uid = require(‘matthewmueller/uid‘);
  var fmt = require(‘yields/fmt‘);
  
  var msg = fmt(‘Your unique ID is %s!‘, uid());
  window.alert(msg);

上面代码加载了uid和fmt两个模块,采用Component的"github用户名/项目名"格式。

接着,编译最终的脚本文件。

$ duo index.js > build.js

编译后的文件可以直接插入网页。

<script src="build.js"></script>

Duo不仅可以编译JavaScript,还可以编译CSS

@import ‘necolas/normalize.css‘;
  @import ‘./layout/layout.css‘;
  
  body {
    color: teal;
    background: url(‘./background-image.jpg‘);
  }

编译时,Duo自动将normalize.css和layout.css,与当前样式表合并成同一个文件。

$ duo index.css > build.css

编译后,插入网页即可。

<link rel="stylesheet" href="build.css">
时间: 2024-10-29 19:07:15

前端模块管理器简介的相关文章

[Web 前端] 使用yarn代替npm作为node.js的模块管理器

cp from : https://www.jianshu.com/p/bfe96f89da0e Fast, reliable, and secure dependency management Yarn是Facebook公司出品的用于管理nodejs包的一款软件,开发过nodejs的同学应该知道,我们一般都使用npm作为我们nodejs项目的模块管理器,但npm有一些历史遗留问题,首先,npm安装速度比较慢,而且当项目中模块数量越来越多时,管理这些模块及其依赖的版本是件令人头疼的事,其次npm

nodejs-npm模块管理器

JavaScript 标准参考教程(alpha) 草稿二:Node.js npm模块管理器 GitHub TOP npm模块管理器 来自<JavaScript 标准参考教程(alpha)>,by 阮一峰 目录 简介 npm init npm set npm config npm info npm search npm list npm install 基本用法 安装不同版本 避免系统权限 npm update,npm uninstall npm run 参数 scripts脚本命令最佳实践 p

扒一扒前端包管理器

好久没有写文章了,前端时间一直瞎忙,最近总算有空闲时间可以好好学习下了,今天和大家分享一下有关前端包管理器的东西,主要把工作中常用的bower与最近一直在研究的browserify.duo以及快过时的component进行了一下介绍与对比,都是干货,希望大家勿喷.啦啦啦,话不多说,开始吧: 一.Bower Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系,其主要作用就是:

npm模块管理器

一.npm简介 npm有两层含义.一层含义是Node.js的开放式模块登记和管理系统,网址为http://npmjs.org.另一层含义是Node.js默认的模块管理器,是一个命令行下的软件,用来安装和管理node模块. npm不需要单独安装.在安装node的时候,会连带一起安装npm.但是,node附带的npm可能不是最新版本,最好用下面的命令,更新到最新版本. npm采用"语义版本"管理软件包.所谓语义版本,就是指版本号为a.b.c的形式,其中a是大版本号,b是小版本号,c是补丁号

Webpack: 为Web开发而生的模块管理器[转]

Webpack: 为Web开发而生的模块管理器 原文地址:http://hanjianwei.com/2014/09/10/webpack-package-manager-for-web/ 10 Sep 2014 对于开发人员而言,好的包管理器可以让工作事半功倍.现在流行的编程语言大多有自己的包管理系统.近年来,Web开发越来越火,其开发工具也随之越来越好用了,而Webpack就是一款专为Web开发设计的包管理器.它能够很好地管理.打包Web开发中所用到的HTML.Javascript.CSS以

swing布局管理器简介

转载:http://stevencjh.blog.163.com/blog/static/1218614612010101775336729/ swing布局管理器简介 一 .BorderLayout布局管理器:BorderLayout 也是一种非常简单的布局策略,它把容器内的空间简单地划分为东.西.南.北.中无个区域,没加入一个组件都应该指明把这个组件加在哪个区域中. BorderLayout是顶层容器( JFrame, JDialog, 和 JApplet )的默认布局管理器.有五个位置组件

我的 React Native 技能树点亮计划 の Javascript 模块管理器 npm

@author ASCE1885的 Github 简书 微博 CSDN 知乎 本文由于潜在的商业目的,不开放全文转载许可,谢谢! npm,全称是 node package manager,顾名思义最开始是作为 Node 的包管理器存在的.不过经过不断的发展和壮大,现在的 npm 早就不再局限于 Node 的范畴,已经成为 Javascript 的包管理器,看看下面的 npm 官网首页介绍就知道了: 本系列教程假设你已经按照 React Native 官方入门指南安装好相关的环境(尤其是 Node

软件管理器简介

1.软件管理器的简介 众所周知,软件作者完成软件开发后将会以源代码(Source Code)的方式发布出来,每次我们需要安装软件时都要检测操作系统(operating system)与环境,设置编译参数进行编译,最后进行安装,过程 十分繁琐,而且对于不熟悉整个编译与安装过程的人来说,操作起来十分困难. 想群众之所想的各大Linux 发行版(distribution)研发出了相应的解决方案(solution),比较常见的是Red Hat的RPM,和Debin的DPKG两个软件管理器. Linux发

JPA初体验系列(三) 实体管理器简介

EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体Bean,也可以通过EJB3 QL语言查找满足条件的Bean.实体Bean 被EntityManager管理时,EntityManager跟踪他的状态改变,在任何决定更新实体Bean的时候便会把发生改变的值同步到数据库中. 实体管理器是JPA中很重要的部分,它的具体功能和作用如下: 从图中可以看出,实体管理器与数据库交互主要体现在两方面: 一是负责将Java中的实体对象操