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

本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划

如今,几乎所有的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”。

这种方法有助于使应用程序更加模块化和可扩展。欢迎在评论中讲述你的看法。

译文链接:http://www.codeceo.com/article/build-nodejs-app-modular-way.html
英文原文:Build Your Node.js Application in a Modular Way
翻译作者:码农网 – 小峰
转载必须在正文中标注并保留原文链接、译文链接和译者等信息。]