当前位置:首页 » 网页前端 » 模块化前端搭建
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

模块化前端搭建

发布时间: 2022-12-19 08:12:32

1. Web Components 前端模块化

此为浏览器的原生组件,由google推动,参照阮一峰列举的案例添加了注释。

以下为js部分

由此,user-card组件便可随时使用,个人认为语法略显笨重,需配合第三方工具使用。。。

2. 如何学习前端模块化知识

学习前端模块化知识主要集中精力学好以下知识点:
1、学好三驾马车:HTML5 + CSS3 + JavaScrip

2、推荐学习过程:
1)CSS
(1)入门:
Codeademy上的html&css课程——在线交互式编程平台,弄清楚基本概念和基本语法
w3school上的HTML/CSS教程——技术手册式的教程,比较全面,照着实例敲一遍
(2)进阶:
《精通CSS·高级Web标准解决方案》——对CSS有一个比较深入的学习,对核心技术了解。
《HTML5权威指南》——非常全面的书,内容也很新,包含了HTML5+CSS3+JS DOM
(3)实战:
bootstrap框架: bootstrap中文网/《bootstrap实战》——流行的前端框架,注重实用即可
Codeademy上的Web Developer Skills+Projects——通过自己做小页面/小网站来运用所学
(4)提高:
《CSS禅意花园》——提高自己的艺术设计能力,通过实例来学习如何用CSS设计出漂亮的页面
2).Javascript:
(1)入门:
Codeademy上的javascript教程——实例比较多,比较浅,算是基本了解JS
w3school上的JS教程——比较详细的了解下JS的特性
《JavaScript DOM编程艺术》——讲js和DOM的基本知识和运用,了解JS和DOM可以做什么
(2)进阶:
《JavaScript高级程序设计》——JS圣经,比较全面,非常好的一本书,比犀牛书可阅读性强
《JavaScript权威指南》——传说中的犀牛书,好厚好厚的一本书,不适合入门,适合当工具书看
《JavaScript语言精粹》——很薄的一本书,但是可以帮助你快速了解JS的精华部分
(3)实战:
jQuery框架: w3school上的jQuery教程/Codeademy上的jQuery教程——了解Jquery
《jQuery基础教程》——流行的前端框架,注重实用
(4)提高:
《高性能JavaScript》——讲如何提高js性能,以及构建和部署文件到生产环境的最佳实践
《Secrets of the JavaScript Ninja》——jQuery作者写的书,如果你觉得精通JS了再看这本书

3. gulp+webpack怎么实现前端模块化

gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。

gulp是基于Nodejs的自动任务运行器, 她能自动化地完成
javascript/coffee/sass/less/html/image/css
等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。在实现上,她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。通过本文,我们将学习如何使用Gulp来改变开发流程,从而使开发更加快速高效。

gulp 和 grunt 非常类似,但相比于 grunt 的频繁 IO 操作,gulp 的流操作,能更快地更便捷地完成构建工作。

webpack

Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载。通过 loader 的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块、 AMD 模块、 ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。

**当然个人还是喜欢webpack的模块化优秀

废话不多说现在开始gulp之旅

初始化项目(此处已经认为node环境已经安装)

建立文件夹 名字自己随便取 比如 gulpText,然后输入以下命令
$ cd gulpText
$ mkdir images //建立存放图片文件夹
$ mkdir src // 存放 js 以及css
$ mkdir index.html //主页
$ mkdir gulpfile.js //编写gulp 任务文件
$ mkdir mock //mock数据

然后输入以下命令 然后一路点下去生成json文件
$npm init

打开json文件看到这样的

1474889102536.png

全局安装gulp以便我们运行gulp进行打包等操作
$npm install gulp -g

如果感觉npm安装比较慢可以切换至cnpm下载,代码如下
$npm install cnpm -g

安装gulp包,方便我们引用gulp
$npm install gulp

成功截图

1474889517162.png

编写gulp任务

引入 gulp
//引入gulp
var gulp = require('gulp');

拷贝Index.html
//html
gulp.task('-index',function () {
gulp.src('./index.html')
.pipe(gulp.dest('./build'));
})

执行命令
$ gulp -index

1474890843877.png]( http://upload-images.jianshu.io/upload_images/2905209-c00d640651bde279.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )

1474890828271.png

拷贝images
// images
gulp.task('-images',function () {
gulp.src('./images**/*')
.pipe(gulp.dest('./build/'));
})

执行命令
$ gulp -iamges

1474891076408.png

1474891039689.png

css预处理

现在我们在src目录里创建文件styles放我们的scss代码,需要把scss代码编译到/build/prd/styles/下
$ cd src
$ mkdir styles
$ cd styles
$ touch app.scss
$ touch common.scss

app.scss项目代码
@charset "UTF-8";
@import "./common.scss";
body{
background-color: $base-color;
color: #000;
font-size: 20px;
font-weight: 800;
}
html{
width: 100%;
height: 100%;
}
html{
width: 100%;
height: 100%;
}
.lsds{
width: 100px;
height: 100px;
}

common.scss代码
$base-color:yellow;

安装css预编译包
$ npm install gulp-sass //sass编辑包
$ npm install gulp-minify-css'); //css压缩包
//引入css预处理模块
var sass= require('gulp-sass');
//引入css压缩模块
var minifyCSS = require('gulp-minify-css');
//css预处理

var cssFiles=[
'./src/styles/app.scss'
];
gulp.task('scss',function () {
gulp.src(cssFiles)
.pipe(sass().on('error',sass.logError))
.pipe(minifyCSS())
.pipe(gulp.dest('./build/prd/styles/'))
})

编辑scss
$ gulp scss

开启服务

安装server包
$ npm install gulp-webserver
//引入gulp-webserver 模块
var server = require('gulp-webserver');
gulp.task('server',function () {
gulp.src('./')
.pipe(server({
host:'127.0.0.1', //ip
port:80, //端口
directoryListing:{
enable:true,
path:'./'
},
livereload:true,
}));
})

4. 模块化需要回答系统架构的那些问题

这篇文章给大家介绍前端模块化要解决的两个问题分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

前言

前端模块化,主要是解决两个问题“命名空间冲突”,“文件依赖管理”。

坑___命名空间冲突

我自己测试好的代码和大家合并后怎么起冲突了?
页面脚本的变量或函数覆盖了公有脚本的。
坑___文件依赖管理

明明项目需要引入的包都引进来了怎么还报缺少包?
手动管理依赖,有天要更换某个插件,要深入代码内部进行修改
如下图,显示的代码加载,依赖关系复杂。在F.js中,分不清某个变量是来自C.js,还是E.js
两次加载同一个模块。比如引入了两遍JQ

其他的坑

为了实现脚本复用,将一个很大的公用public文件引入各个页面中,其中的某些函数,只有个别页面用到。
某个功能的函数群函数,与另一个功能的函数群摆在一起,使用注释来分隔。
目前解决的方法是:模块化

命名空间:各个模块的命名空间独立。A模块的变量x不会覆盖B模块的变量x。
模块的依赖关系:通过模块管理工具如webpack/requireJS/browserify等进行管理。
模块化的基本原理解决命名空间冲突

JavaScript的缺陷,首当其冲就是全局变量。这使得每想命名一个变量的时候都要三思又三思,生怕上方无穷远的地方有一个同事些的代码和自己冲突。以下是一些防范方法

一、使用命名空间

代码如下:

//定义 var mole = {     name: 'rouwan',     sayName:function(){         console.log(this.name)     } } //使用 var a = mole.name; console.log(a)
总结:直接修改name不会影响mole.name,一定程度保护了命名空间。有两个缺点,一,外部还是可以修改mole的属性和方法。二,命名空间有时长起来超乎你的想象。适合一些小型的封装,如一些配置。

二、立即执行函数 + 闭包(实现模块的基本方法)

立即函数可以创建作用域,闭包则可以形成私有变量和函数

//创建 var mole = (function(){                 var privateName = 'inner';            //私有变量                 var privateFunc = function(){        //私有函数                     console.log('私有函数')                 }                  return {          

5. 如何实现前端模块化开发

SeaJS 是一个适用于 Web 浏览器端的模块加载器。
使用 SeaJS,可以更好地组织 JavaScript 代码。

6. 如何实现前端模块化开发

requireJS seaJS都是模块化开发的 你可以网上搜下文档 很简单的

7. 如何理解前端模块化

前端模块化
在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可;如今CPU、浏览器性能得到了极大的提升,很多页面逻辑迁移到了客户端(表单验证等),随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀

这时候JavaScript作为嵌入式的脚本语言的定位动摇了,JavaScript却没有为组织代码提供任何明显帮助,甚至没有类的概念,更不用说模块(mole)了,JavaScript极其简单的代码组织规范不足以驾驭如此庞大规模的代码

模块
既然JavaScript不能handle如此大规模的代码,我们可以借鉴一下其它语言是怎么处理大规模程序设计的,在Java中有一个重要带概念——package,逻辑上相关的代码组织到同一个包内,包内是一个相对独立的王国,不用担心命名冲突什么的,那么外部如果使用呢?直接import对应的package即可

import java.util.ArrayList;
遗憾的是JavaScript在设计时定位原因,没有提供类似的功能,开发者需要模拟出类似的功能,来隔离、组织复杂的JavaScript代码,我们称为模块化。

一个模块就是实现特定功能的文件,有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。模块开发需要遵循一定的规范,各行其是就都乱套了

规范形成的过程是痛苦的,前端的先驱在刀耕火种、茹毛饮血的阶段开始,发展到现在初具规模,简单了解一下这段不凡的历程

函数封装
我们在讲函数的时候提到,函数一个功能就是实现特定逻辑的一组语句打包,而且JavaScript的作用域就是基于函数的,所以把函数作为模块化的第一步是很自然的事情,在一个文件里面编写几个相关函数就是最开始的模块了

function fn1(){
statement
}

function fn2(){
statement
}
这样在需要的以后夹在函数所在文件,调用函数就可以了

这种做法的缺点很明显:污染了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间没什么关系。

对象
为了解决上面问题,对象的写法应运而生,可以把所有的模块成员封装在一个对象中

var myMole = {
var1: 1,

var2: 2,

fn1: function(){

},

fn2: function(){

}
}
这样我们在希望调用模块的时候引用对应文件,然后

myMole.fn2();
这样避免了变量污染,只要保证模块名唯一即可,同时同一模块内的成员也有了关系

看似不错的解决方案,但是也有缺陷,外部可以随意修改内部成员

myModel.var1 = 100;
这样就会产生意外的安全问题

立即执行函数
可以通过立即执行函数,来达到隐藏细节的目的

var myMole = (function(){
var var1 = 1;
var var2 = 2;

function fn1(){

}

function fn2(){

}

return {
fn1: fn1,
fn2: fn2
};
})();
这样在模块外部无法修改我们没有暴露出来的变量、函数

上述做法就是我们模块化的基础,目前,通行的JavaScript模块规范主要有两种:CommonJS和AMD

CommonJS
我们先从CommonJS谈起,因为在网页端没有模块化编程只是页面JavaScript逻辑复杂,但也可以工作下去,在服务器端却一定要有模块,所以虽然JavaScript在web端发展这么多年,第一个流行的模块化规范却由服务器端的JavaScript应用带来,CommonJS规范是由NodeJS发扬光大,这标志着JavaScript模块化编程正式登上舞台。

定义模块
根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性

模块输出:
模块只有一个出口,mole.exports对象,我们需要把模块希望输出的内容放入该对象

加载模块:
加载模块使用require方法,该方法读取一个文件并执行,返回文件内部的mole.exports对象

8. 对前端模块化的理解有哪些

前端模块化指的是:
1、将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),
并进行组合在一起
2、块的内部数据与实现是私有的,
只是向外部暴露一些接口(方法)与外部其它模块通信
说白了就是把常见的工具函数和一些UI组件封装,可以再后续的开发过程中非常方便的进行调用,这就是前端模块化