问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何实现前端模块化开发

发布网友 发布时间:2022-04-06 11:07

我来回答

3个回答

热心网友 时间:2022-04-06 12:37

前端如果想做模块化开发,首先需要针对每一种资源(
JavaScript

CSS
、模板等)寻找
一种模块与集成方案,然后需要根据情况的不同选用不同的工具框架拼凑出来。

SeaJS
是一个适用于

Web
浏览器端的模块加载器。使用

SeaJS
,可以更好地组织

JavaScript
代码。

不知道别人怎么做的,我自己现在的做法是,基本通用的功能做成一个
js
文件,
js


html
标签和
style
样式,只需要一个
div
带上
id
调用一下就
ok
了,比如图片上传。而一
些常用但不通用的功能做成一组文件,包括
js
和一定的
html
结构还有一个
css
文件,也可
能还有图片什么的,有时候甚至做成不用调用,直接加载就能用。

至于具体的调用方法,
大概就是
window
定义一个变量,
放入调用的这个功能的
function
初始化一个模块,
并返回这个模块闭包中的一些方法用来操作或者获取和设置一些模块闭包
内的变量。

JavaScript

目前比较拿的出手的,也就是
JavaScript
的模块化,比如
AMD
或者
CMD
等等,分别可以使

RequireJS

SeaJS


去年在研究基于
Backbone
的框架
Marionette
时,想与
Sea.js
结合使用。现在来看这种组合
是完全没有必要的。
Marionette
提供了模块化的组织方案,反而生拉硬扯在一起,冲突得很
难受。其实把
JavaScript
文件一列放在
HTML
中也没什么问题。

究竟使用什么来实现
JavaScript

往往与选择的
JavaScript
框架有关,

Backbone
可以
AMD

也可以
CMD
。选
AngularJS
直接引用就行。

CSS

CSS
模块化应该是两方面的问题——

一是模块必须有一套基础样式。与
JavaScript
相比,
CSS
冲突简直是家常便饭,
Shadow DOM
还没成熟,
原生的
CSS
样式隔离还在路上。
所以必须有一套基础样式来规定这一套模块化组
件的样式。我们可以选
Bootstrap
,如果闲它太重,也可以自己写。

其次,每个组件必须有命名空间,避免组件间样式冲突。如果选择使用
LESS

SASS
等,那
就比较好办,它们的缩进语法避免写很多重复的
CSS
代码。

HTML
模板

如果使用
AngularJS


AngularJS
已经帮您解决了模板模块化的问题,
AngularJS
可以根据模
块代码中的引用加载对应的
HTML
。如果使用
Backbone
,可以选择各种各样的模板引擎,
Mustache
?不过比起
AngularJS
就低端些,我们必须自己处理模板文件,要么通过模块加载
器通过
XHR
请求,然后动态编译;或者将
Mustache
编译成
JS
,在当做模块加载。

图片、字体?

放在使用他们的模块中,该怎么引用就怎么引用。

国际化文件?这些就不多说了,总之,每种文件需要选定一种开发的组织方式。

模块分发

模块采用统一的模式来开发之后,只需选定一种包的分发方式就行了——
Bower

npm
不适
合这样的场景,
npm
的版本管理太过细致了。如果同一个项目中允许出现同一模块的不同
版本,事情就做的太过复杂了。

发布上线

发布上线必须一个以终为始的过程。
如果你不追求网站或者应用的速度,
那就把那些开发文
件直接丢到生产服务器上去吧。别说,我还真见过这样的商用的网站。

如果讲究一些方案,
资源合并成数个文件,
代码线上组合和运行方式完全可以与本地开发不
一样。只需要功能在就行。

JavaScript
代码打成一个文件,或者两个?都行。如果使用
RequireJS
,那
RequireJS
提供了打
包的工具,打包成几个文件,什么粒度,都行。如果是
Sea.js
也有对应的工具。就算文件都
是一个一个列出来,我们也总是可以打出来你想要的文件。

CSS
等等其他资源都是如此,就算开发时各自不同的结构模式,打包时都是可以打的。

至于上线
CDN
,版本号缓存什么的并不在本文的讨论范围之内。

总结

前端模块没有什么特效药。唯一要遵守的原则就是,

比起
Node.js
来讲,每种资源必须要
有一种自己的开发和上线组织方式


Node.js
开发和上线都是一致的)
,开发和上线完全可
以是两种方式,
大可不必人云亦云,
只要适合可以随意组合;
CSS

CSS Scoped Style
正式使
用之前,应该有一套基础样式和沙盒(模块样式命名空间)


每个模块中的
HTML
怎么办,
如果我们使用的框架是
Backbone

注定我们要将
HTML
模板转
换成
JavaScript
模块,或者使用模块加载器的插件来实现。如果我们使用
AngularJS
,那倒是
可以交由
AngularJS
。发布时
Backbone
中的模块使用
AMD
打包,
AngularJS
可以使用
Grunt
内联到页面中。

HTML
模块也没有固定的模式,没有固定的
SDK
来解脱我们。我们只能组合现有的工具!

CSS
就更不用说了,分开写,使用
LESS

SASS
来组织?再一次没有固定的模式没有
SDK

热心网友 时间:2022-04-06 13:55

根据虾米站长文章指出,现在前端的快速发展阶段可分为前端美工,前端开发,前端架构。一个好的前端美工,至少要具备美术功底,ps技能,还能创意的设计理念。一个好有前端开发,你至少具备页面切图,脚本开发,页面优化等相关知识。

热心网友 时间:2022-04-06 15:29

SeaJS 是一个适用于 Web 浏览器端的模块加载器。
使用 SeaJS,可以更好地组织 JavaScript 代码。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
原神留影机如何使用 《原神》奇特的留影机任务攻略介绍_《原神》奇特的留影机任务攻略... 《原神》留影机使用方法介绍_《原神》留影机使用方法是什么 野菜鸡蛋饼制作步骤 如何做野菜鸡蛋饼会更美味? 有哪些懒人野菜鸡蛋饼推荐? 如何在家自制好吃的野菜鸡蛋饼? 曹杰人物主要观点 请求大家帮忙解答:一分数分母减2得4/5,分母加1得2/3,求原分数?我要具体... -1/2,2/3,-3/4,4/5……的通项公式是什么? 微信发表朋友圈怎么同步发表到另一个微信朋友圈 两个微信的朋友圈怎么互通了 CSS3是什么?和2.1有什么区别吗? 为什么我下载完冒险岛后安装说缺少DATA.Z01···在一起的三个文件都在怎么就缺少··按装不了 龙之谷下载之后这样怎么安装? 传奇世界现在怎么安装Data.z01怎么不是压缩文件 什么是zo1文件 filesmonster zo1 解压缩 win7旗舰版 zo1文件打不开 怎么办 把下载下来的文件后缀为zo1、zo2的改成了rar;怎么改回成原来的?求详细点 Z01文件问题 急急急~ .z是什么文件?打不开 zo1文件如何使用 zo1文件打开方式还原 ZO1文件怎么打开或者解压啊 后缀为zo1 zo2 zo3 zo4的文件怎么打开? 后缀为zo1的文件怎么打开啊?? 如何打开zo1文件 做了这么久的前端开发,听过Css模块化开发么 胆固醇偏高吃什么食物可以降胆固醇? 微信发朋友圈,用什么软件可以同时发另外一个微信的朋友圈,就是发一个微信朋友圈可以同时同步另一个! 鲅鱼的钓法 钓鲅鱼用什么钩 现在掉梭鱼还有口吗? 5、交易所债券市场与银行间债券市场的区别,简述交易所回购制度的缺陷? 银行间债券市场和交易所证券市场的区别 交易所的交易所简介 深圳证券交易所的市场体系 天天炫斗3v3竞技场什么职业好 3v3人机为什么没有暃 3v3这么爽为什么没人玩 王者荣耀3v3和深渊大乱斗那个打的快 魔兽争霸3冰封王座3v3无限人口大乱斗 带娜迦族 地图名:3V3 NO LIMITS AND NO LUMBER(4)!!!! 《王者荣耀》实战对抗3v3胜利,英雄加多少熟练度,MVP额外加吗? 魔兽争霸3冰封王座3V3无限人口大乱斗地图 (带娜迦族) 地图名是3V3 NO LIMITS AND NO LUMBER(4)!!!! lol怎么弄3v3的极地大乱斗 Lolpvp是什么意思?是不是只能打匹配,大乱斗算不? 类似王者荣耀的单机游戏有什么? iphone6有一个很像英雄联盟的游戏 排位赛匹配规则 详细整理一览