前端模块管理器简介

简介:

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

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

模块化结构

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

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

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

RequireJS

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

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

Bower

Bower

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

首先,安装Bower。


  $ 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

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

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

首先,安装Component。


  $ npm install -g component@1.0.0-rc5

上面代码之所以需要指定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/normalize.css@3.0.1 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

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"> 

(完)

目录
相关文章
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(15)--- 用户管理模块的处理
循序渐进VUE+Element 前端应用开发(15)--- 用户管理模块的处理
|
前端开发 JavaScript 开发者
qiankun(乾坤)微前端框架简介
qiankun(乾坤)微前端框架简介
3945 1
|
前端开发 开发者
在前端开发中,webpack 作为一个强大的模块打包工具,为我们提供了丰富的功能和扩展性
【9月更文挑战第1天】在前端开发中,Webpack 作为强大的模块打包工具,提供了丰富的功能和扩展性。本文重点介绍 DefinePlugin 插件,详细探讨其原理、功能及实际应用。DefinePlugin 可在编译过程中动态定义全局变量,适用于环境变量配置、动态加载资源、接口地址配置等场景,有助于提升代码质量和开发效率。通过具体配置示例和注意事项,帮助开发者更好地利用此插件优化项目。
289 13
|
前端开发
前端浮动模块
前端浮动模块
194 0
前端浮动模块
|
JavaScript 前端开发
【前端web入门第一天】03 综合案例 个人简介与vue简介
该网页采用“从上到下,先整体再局部”的制作思路,逐步分析并编写代码实现个人简介页面。内容涵盖尤雨溪的背景、学习经历及主要成就,同时介绍其开发的Vue.js框架特点。代码结构清晰,注重细节处理,如使用快捷键提高效率,预留超链接位置等,确保最终效果符合预期。
518 7
|
前端开发 安全 测试技术
[译]一种基于模块联邦的插件前端
[译]一种基于模块联邦的插件前端
|
前端开发 容器
前端框架与库 - Angular模块与依赖注入
【7月更文挑战第17天】探索Angular的模块化和依赖注入:模块用于组织组件、服务等,通过`@NgModule`声明。依赖注入简化类间依赖管理,但面临模块重复导入、服务作用域不当和依赖循环等问题。解决策略包括规划模块结构、正确设置服务作用域和使用工厂函数打破循环依赖。遵循最佳实践,构建高效、可维护的Angular应用。
347 17
|
开发框架 JSON 缓存
基于SqlSugar的开发框架循序渐进介绍(22)-- Vue3+TypeScript的前端工作流模块中实现统一的表单编辑和表单详情查看处理
基于SqlSugar的开发框架循序渐进介绍(22)-- Vue3+TypeScript的前端工作流模块中实现统一的表单编辑和表单详情查看处理
|
JSON 前端开发 JavaScript
前端模块打包器的深度解析
【10月更文挑战第13天】前端模块打包器的深度解析
|
开发框架 前端开发 JavaScript
在微信框架模块中,基于Vue&Element前端的事件和内容的管理
在微信框架模块中,基于Vue&Element前端的事件和内容的管理

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    1258
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    572
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    434
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    434
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    548
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    727
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1414
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    315
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1168
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    509