目录
 Bower
 Browserify
 Component
Getting Started with Component
 Duo
首页 web前端 html教程 前端模块管理器简介_html/css_WEB-ITnose

前端模块管理器简介_html/css_WEB-ITnose

Jun 24, 2016 am 11:53 AM

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

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

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

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

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

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

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

 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本身不是模块管理器,只是让服务器端的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 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 id="Getting-Started-with-Component">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是在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">
登录后复制

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

&gt; gt;的目的是什么 元素? &gt; gt;的目的是什么 元素? Mar 21, 2025 pm 12:34 PM

本文讨论了HTML&lt; Progress&gt;元素,其目的,样式和与&lt; meter&gt;元素。主要重点是使用&lt; progress&gt;为了完成任务和LT;仪表&gt;对于stati

&lt; datalist&gt;的目的是什么。 元素? &lt; datalist&gt;的目的是什么。 元素? Mar 21, 2025 pm 12:33 PM

本文讨论了html&lt; datalist&gt;元素,通过提供自动完整建议,改善用户体验并减少错误来增强表格。Character计数:159

&lt; meter&gt;的目的是什么。 元素? &lt; meter&gt;的目的是什么。 元素? Mar 21, 2025 pm 12:35 PM

本文讨论了HTML&lt; meter&gt;元素,用于在一个范围内显示标量或分数值及其在Web开发中的常见应用。它区分了&lt; meter&gt;从&lt; progress&gt;和前

HTML5中跨浏览器兼容性的最佳实践是什么? HTML5中跨浏览器兼容性的最佳实践是什么? Mar 17, 2025 pm 12:20 PM

文章讨论了确保HTML5跨浏览器兼容性的最佳实践,重点是特征检测,进行性增强和测试方法。

如何使用HTML5表单验证属性来验证用户输入? 如何使用HTML5表单验证属性来验证用户输入? Mar 17, 2025 pm 12:27 PM

本文讨论了使用HTML5表单验证属性,例如必需的,图案,最小,最大和长度限制,以直接在浏览器中验证用户输入。

视口元标签是什么?为什么对响应式设计很重要? 视口元标签是什么?为什么对响应式设计很重要? Mar 20, 2025 pm 05:56 PM

本文讨论了视口元标签,这对于移动设备上的响应式Web设计至关重要。它解释了如何正确使用确保最佳的内容缩放和用户交互,而滥用可能会导致设计和可访问性问题。

&lt; iframe&gt;的目的是什么。 标签?使用时的安全考虑是什么? &lt; iframe&gt;的目的是什么。 标签?使用时的安全考虑是什么? Mar 20, 2025 pm 06:05 PM

本文讨论了&lt; iframe&gt;将外部内容嵌入网页,其常见用途,安全风险以及诸如对象标签和API等替代方案的目的。

Gitee Pages静态网站部署失败:单个文件404错误如何排查和解决? Gitee Pages静态网站部署失败:单个文件404错误如何排查和解决? Apr 04, 2025 pm 11:54 PM

GiteePages静态网站部署失败:404错误排查与解决在使用Gitee...

See all articles