题记: 一个人的项目,还有工程化的问题嘛?
我们在推进模块化和组件化的过程中,肯定会不断的沉淀出我们项目的模块和组件。对于这些沉淀出的模块和组件怎么管理?另外怎么依赖也是个问题?
你真的想这样嘛?
var BreadCrumb = require(‘../../../../uikit/breadcrumb’); //真心ugly。
之前也尝试了很多的不同的解决方案,最终发现npm2.0的local module是最简单的,而且最符合模块化思维,我们可以把我们的模块按照功能进行划分。
比如:
uikit
— breadcrumb.js
— data-table.js
— search-form.js
...
util
—ajax.js
—pagenation.js
dialog.js
...
这样我们建立自己的模块,然后可以单独的维护,单独提交到git,然后通过npm install来进行本地安装。而且解决了依赖的问题。
对于上面的问题,我们可以简单这样玩:
var BreadCrumb = require(‘uikit/breadcrumb’); //cool.正如我们期待的一般
但是通过我们项目多人协调的过程中,不爽的地方暴露出来,因为我们的公共模块很少,我们也在不断努力的在抽取,这样会导致我们公共的模块变化比较大,每次变动的时候都需要删除node_modules下面本地安装的uikit,然后再次npm install ….一次我忍了,二次一声叹息, 三次四次,你妹。。。是的,我懂的,我们都么有那么好的耐心。
那怎么办呢??
我们又想按照标准模块的做法,又想酷爽的解决标准模块的依赖问题。不得再次祭出webpack。真的懂我们开发者的心啊,么么哒!
由于node的横空出世,彻底解放了前端的生产力。大神们纷纷开始造了一个个轮子。比如想在前端建立前端的仓库,类似maven的仓库,比较有名的是bower(twitter出品),components(tj大神)。所以为了兼容这些轮子,webpack也做了相应的适配。正好这个适配也可以很好的解决上面我提到的我们想要解决的问题。
剩下的事情就变得异常的简单了, 一个配置项搞定。
在webpack中的配置文件中
module.exports = {
entry: './index.js',
output: {
path: './build',
filename: 'bundle.js'
},
entry: './index.js',
output: {
path: './build',
filename: 'bundle.js'
},
resolve: {
modulesDirectories: ['', 'uikit', 'node_modules’] //是的,webpack提供了多个模块目录的解析,通过这个解决本地模块的问题。
}
};
for example:
➜ web-module tree -L 2
.
├── build
│ └── bundle.js
├── index.js
├── package.json
├── uikit
│ ├── index.js
│ ├── package.json
│ └── utils.js
├── webpack.config.js
└── webpack.config.js~
.
├── build
│ └── bundle.js
├── index.js
├── package.json
├── uikit
│ ├── index.js
│ ├── package.json
│ └── utils.js
├── webpack.config.js
└── webpack.config.js~
2 directories, 8 files
➜ web-module more uikit/utils.js
var _ = module.exports = {};
_.sayHello = function() {
console.log('111say hello world...');
var _ = module.exports = {};
_.sayHello = function() {
console.log('111say hello world...');
};
➜ web-module more index.js
require('uikit/utils').sayHello();
打包,
webpack
运行
➜ web-module node build/bundle.js
111say hello world...
这是你修改utils的方法,就不需要什么本地安装了。
在我们顺利的解决了模块化依赖的问题后,再来看看工作流的问题。
当我们在开发环境中,我们需要不停的自动的监控打包,然后在上线之前还要做做写优化比如压缩等。于是就需要不停的敲命令了。
开发环境,
webpack
webpack -d —-config webpack.config.js
webpack —watch
webpack -d —config webpack.config.js —watch
上线:
webpack -p —config webpack.production.js
敲出上述的命令也真是一件体力活。还好npm的run可以为我们定制一些的工作流。在package.json中配置,相应的参数即可。
{
"name": "web-module",
"version": "1.0.0",
"description": "web module",
"main": "index.js",
"scripts": {
"build": "webpack --config webpack.config.js -w",
"release": "webpack --config webpack.production.js",
"start": "webpack-dev-server --port 3000 --watch --process --color"
},
"keywords": [
"web",
"module"
],
"author": "hufeng",
"license": "ISC"
}
"name": "web-module",
"version": "1.0.0",
"description": "web module",
"main": "index.js",
"scripts": {
"build": "webpack --config webpack.config.js -w",
"release": "webpack --config webpack.production.js",
"start": "webpack-dev-server --port 3000 --watch --process --color"
},
"keywords": [
"web",
"module"
],
"author": "hufeng",
"license": "ISC"
}
爽直的时刻:
npm run build #开发
npm run dist #正式环境打包
➜ web-module npm run build
> web-module@1.0.0 build /Users/bee1314/Code/eggs/web-module
> webpack --config webpack.config.js -w
Hash: a2f467270792fdfe044c
Version: webpack 1.4.15
Time: 77ms
Asset Size Chunks Chunk Names
bundle.js 1709 0 [emitted] main
[0] ./index.js 35 {0} [built]
[1] ./uikit/utils.js 99 {0} [built]
> web-module@1.0.0 build /Users/bee1314/Code/eggs/web-module
> webpack --config webpack.config.js -w
Hash: a2f467270792fdfe044c
Version: webpack 1.4.15
Time: 77ms
Asset Size Chunks Chunk Names
bundle.js 1709 0 [emitted] main
[0] ./index.js 35 {0} [built]
[1] ./uikit/utils.js 99 {0} [built]
➜ web-module npm start
> web-module@1.0.0 start /Users/bee1314/Code/eggs/web-module
> webpack-dev-server --port 3000 --watch --process --color
http://localhost:3000/webpack-dev-server/
webpack result is served from /
content is served from /Users/bee1314/Code/eggs/web-module
Hash: a2f467270792fdfe044c
Version: webpack 1.4.15
Time: 90ms
Asset Size Chunks Chunk Names
bundle.js 1709 0 [emitted] main
chunk {0} bundle.js (main) 134 [rendered]
[0] ./index.js 35 {0} [built]
[1] ./uikit/utils.js 99 {0} [built]
> web-module@1.0.0 start /Users/bee1314/Code/eggs/web-module
> webpack-dev-server --port 3000 --watch --process --color
http://localhost:3000/webpack-dev-server/
webpack result is served from /
content is served from /Users/bee1314/Code/eggs/web-module
Hash: a2f467270792fdfe044c
Version: webpack 1.4.15
Time: 90ms
Asset Size Chunks Chunk Names
bundle.js 1709 0 [emitted] main
chunk {0} bundle.js (main) 134 [rendered]
[0] ./index.js 35 {0} [built]
[1] ./uikit/utils.js 99 {0} [built]
webpack: bundle is now VALID.
相关推荐
前端工程化是指将前端开发过程系统化、标准化,通过工具、流程和规范来提升开发效率,减少错误,增强代码的可读性和可复用性。其主要目标包括:自动化构建流程、模块化代码组织、持续集成与部署、代码质量控制以及...
在现代Web开发中,"Web前端工程化与组件化开发实践"已经成为提升开发效率和代码质量的重要手段。本文将深入探讨这两个概念,并结合具体的实践案例,解析如何在JavaScript开发中应用它们。 首先,前端工程化是指通过...
《tinywebpack:前端工程化的基石Webpack详解》 Webpack,作为前端开发中的重要工具,它将复杂的前端项目组织成模块,并通过“打包”过程优化资源加载,实现高效、可维护的前端应用。Tinywebpack,顾名思义,是...
前端模块化开发是互联网前端领域的一项重要技术,它的主要目的是将复杂的程序分解成一系列容易管理和维护的模块。在网页开发的早期阶段,...在学习和工作中掌握模块化开发的规范和技巧,是每一位前端工程师的必备技能。
总结起来,前端工程化中的模块化是通过各种规范(如AMD、CMD、CommonJS、ES6模块化)和工具(如webpack、Vue CLI)来实现的,它让代码组织更加有序,提高了开发效率和代码质量。在Vue全家桶中,模块化贯穿于单文件...
学习和使用前端开源库-app-bundler,不仅可以提升前端项目的构建效率,还能掌握现代前端工程化的核心技术,包括模块化、静态分析、性能优化等。对于前端开发者来说,理解和熟练运用这些工具是提升专业技能的重要途径...
微前端的发展还涉及到如何利用OpenAPI、编排工具、UI组件库等来构建和集成微应用,以及如何处理微应用与小程序、企业数字化转型和云计算的结合。 微前端架构体系不仅仅是技术实现的问题,它还涉及到组织、流程和...
PANTO(可能是" Pants On The Outside"的缩写,但在此上下文中,我们更多地将其视为一个工具名)是一个用于构建和管理前端项目的工作流工具,类似于Gulp或Webpack。它提供了一种自动化的方式来处理构建过程,包括...
### 使用grunt进行前端工程化构建 #### 一、引言 在前端开发领域,随着项目的复杂度不断提高,传统的手动操作已经难以满足高效开发的需求。此时,自动化构建工具应运而生,其中Grunt作为一款非常受欢迎的任务运行...
dot-tpl-loader支持这种格式,使得前端开发者能够利用熟悉的模板语法编写视图层,同时结合Webpack的强大功能,实现高效、灵活的前端工程化。 4. **如何使用dot-tpl-loader?** 首先,你需要在项目中安装dot-tpl-...
Webpack前端工程化实践主要围绕着现代前端开发中的模块化、依赖管理和构建优化展开,旨在提升开发效率和代码质量。Webpack作为其中的核心工具,它的发展历程和功能特性是理解整个前端工程化体系的关键。 Webpack的...
**gulp-amd-bundler** 是一个前端开发中的开源库,主要功能是将遵循AMD(Asynchronous Module Definition)规范的模块及其依赖打包成...通过深入理解和灵活运用,开发者可以充分利用其特性,打造高效、整洁的前端工程。
通过这种方式,前端开发者可以充分利用FIS3的生态系统,实现高效的前端工程化管理。 总之,【前端开源库-fis3-parser-browserify】是FIS3框架的一个重要组件,它实现了Browserify与FIS3的无缝集成,让前端开发者...
通过研究京东的前端工业化之路,我们可以了解到他们在前端工程化、规范制定、模块化开发、开发工具和流程管理等方面的做法和成果。 首先,京东的前端工业化实践强调代码的可复用性和易扩展性。在多业务线的支撑下,...
在amend库中,DI模块可能是用来帮助开发者轻松管理和注入所需的服务或对象,使得代码更加模块化,便于维护。 最后,IoC容器是实现依赖注入的一种常见工具。IoC容器负责创建对象,管理它们的生命周期,并负责将依赖...
- Angular:了解依赖注入、指令、服务、模块化,以及变更检测机制。 6. 响应式设计与移动优先: - 媒体查询:运用CSS媒体查询实现不同设备的适配。 - Flexbox和Grid布局:在响应式设计中的应用,以及如何调整...
2. **组织结构**:task-master可能通过模块化的方式组织任务,每个任务可以被看作是一个独立的模块,便于维护和复用。这有助于提高代码的可读性和可维护性。 3. **依赖管理**:任务之间可能存在依赖关系,比如A任务...
Ruoyi-Cloud是一款基于Ant Design Vue框架的前端工程,主要应用于web应用开发,特别是后台管理系统的设计和构建。Ant Design Vue是阿里巴巴推出的一款Vue.js组件库,它将Ant Design的设计理念与Vue.js的轻量、易用性...
**qp-build** 是一个专为前端开发者设计的开源构建工具,它主要用于简化和优化前端项目的构建过程。在现代Web开发中,构建工具是必不可少的一...同时,深入理解qp-build的工作机制,有助于提升前端工程化的实践能力。