模块化方式构建Node.js应用程序

时间: 2019-03-24阅读: 20标签: 模块化

如今,几乎所有的Web服务或集成都是在Node.js运行时上完成的。Node.js是一个具有很多社区支持的灵活平台。我们甚至可以直接从Node.js创建xlsx,docx或pdf文档。所有主流云平台都可以使用Node.js作为其1级语言。


模块化

Node.js通过设计,可以使用node_modules结构来实现模块化。所有必需的模块都存储在node_modules目录中,并且我们可以在代码中的任何地方调用这些模块。

而现在,我们将在应用程序代码中使用这种模块化的方式。我看到的大多数应用程序都包含一个lib文件夹,其中存储了所有的JS文件。这些js文件使用相对路径导入所需区域。

const db = require("../db/")
const logging = require ("../../logging")

这种方法的主要问题是当我们改变服务文件的路径时,到DB的路径也应该改变。此外,格式是不可读的。我们将对文件的真实性感到困惑。


解决方案

一个更好的方法是将应用程序设计为模块,例如DB,日志记录,错误等。假设你的应用程序名称为cms,那么使用scope可以更容易地表示模块。

require("@cms/db")

你可以单独开发模块,并将它们发布到任何NPM服务器(公共/私有),并像任何其他模块一样使用它们。

如果你的应用程序需要日志记录模块:

npm install --save @cms/logging

如果你不想将应用程序分成几个部分,那么还有另一种方法。


更优的方式

将所需的模块保存在一个单独的文件夹中。假设有“@cms”。为每个模块使用单独的文件夹,让模块有一个单独的package.json。这样就可以成为一个有效的Node模块。

模块的package.json将如下所示

{
  "name": "@cms/db",
  "version": "1.0.1",
  "description": "db module for CMS Application",
  "main": "index.js",
  "dependencies":{
"mysql" : "latest"
  }
}

模块准备好了之后,就可以做一些脚本了。在“scripts”文件夹中添加install.js。

let fs = require('fs')
console.log('Creating symlinks ...')
if (fs.existsSync('node_modules/@cms')) {
    console.log('link exists already ')
} else {
    let source = '../@cms'
    console.log(`creating link for ${source}`)
    fs.symlinkSync(source, 'node_modules/@cms', 'junction')
    console.log('done')
}

将此脚本添加到main package.json。

{
  "name": "CMSApplication",
  "version": "1.0.1",
  "description": "Sample CMS Application",
  "main": "index.js",
  "scripts": {
    "install": "node scripts/install.js",
    "start": "node index.js"
  },
  "dependencies":{
"express" : "latest"
  }
}

每当你执行npm安装时都会执行该脚本。因此,一旦所有其他节点模块被定义并且依赖关系被安装好了之后,它将创建从@cms文件夹外部到@cms文件夹内部node_modules的链接。所以你对外部@cms文件夹所做的任何更改都将反映到文件夹内部的node_modules。

你可以看到我们对@cms安装了符号链接。这不是一个快捷文件,不是在Linux中使用“ln”创建的硬链接。

在@cms内部,你可以看到我们在外部@cms文件夹中定义的模块。

这样你就实现了模块化。“@cms”文件夹是你源代码的一部分。然后你可以按正常方式导入所需的模块。

const {logger} = require("@cms/logging")
logger.info("Welcome to CMS Application")

当你希望应用程序执行时,运行“npm install”,然后运行“npm start”。

站长推荐

1.阿里云: 本站目前使用的是阿里云主机,安全/可靠/稳定。点击领取2000元代金券、了解最新阿里云产品的各种优惠活动点击进入

2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各类产品的最新活动,优惠券领取点击进入

3.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/8383

Js模块化的作用、原理、方案

将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并进行组合在一起;块的内部数据与实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信。因为在实际的开发过程中,经常会遇到变量、函数、对象等名字的冲突,这样就容易造成冲突,还会造成全局变量被污染;

JS模块化的梳理

Node应用使用CommonJS模块规范,Node中每个文件就是一个模块,有自己的作用域,在模块中定义的变量、函数都是私有的。模块中有四个重要的变量global、module、exports、require。

前端模块化:CommonJS,AMD,CMD,ES6

模块化的开发方式可以提高代码复用率,方便进行代码的管理。通常一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数。目前流行的js模块化规范有CommonJS、AMD、CMD以及ES6的模块系

ES6与 CommonJS 模块化的区别

CommonJS 模块输出的是值的拷贝,也就是说,一旦输出一个值,模块内部的变化就影响不到这个值。ES6 Modules 的运行机制与 CommonJS 不一样。JS 引擎对脚本静态分析的时候,遇到模块加载命令import,就会生成一个只读引用。

Js模块化方案总结

本文包含两部分,第一部分通过简明的描述介绍什么是 CommonJS、AMD、CMD、UMD、ES Module 以及它们的常见用法,第二部分则根据实际问题指出在正常的 webpack 构建过程中该如何指定打包配置中的模块化参数。

前端模块化

众所周知,早期 JavaScript 原生并不支持模块化,直到 2015 年,TC39 发布 ES6,其中有一个规范就是 ES modules(为了方便表述,后面统一简称 ESM)。但是在 ES6 规范提出前,就已经存在了一些模块化方案

理解JS 模块化

在模块化规范形成之前,JS开发者使用Module设计模式来解决JS全局作用域的污染问题。Module模式最初被定义为一种在传统软件工程中为类提供私有和公有封装的方法。在JavaScript中,Module模式使用匿名函数自调用 (闭包)来封装

css模块化方案

这篇文章主要介绍了css模块化方案,css的模块化方案可能和js的一样多,下面简单介绍几种主要的模块方案,非常具有实用价值,需要的小伙伴可以参考下。css的模块化方案可能和js的一样多,下面简单介绍几种主要的模块方案

ES6 模块化和 .vue组件的应用举例

CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。export通过接口,输出的是同一个值。不同的脚本加载这个接口,得到的都是同样的实例。

AMD 模块化最佳实践

AMD 是 RequireJS 给出的模块加载方案。 支持递归依赖解析、模块异步加载,夜兼容 CommonJS 可以在 Node.js 里用。 虽然目前已经不再流行,很多站点更倾向于编写 ES Modules 并直接 Webpack 打包, 但 AMD 是完整的

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全运营推广