Nodejs的局部模块引入方式

Nodejs的局部模块引入方式

因为是局部安装的Express,所以它的一些中间件引入的时候需要输入全路径 例 var express = require(“express”); //优雅的引入方式 var bodyparser = require("./node_modules/express/node_modules/body-parser") //比较笨的引入方式

请问这种局部模块的局部模块有有没有比较优雅的引入方式呢?

----------------------------------------追加------------------------------------------------ 先说说我创建项目的主要步骤吧 mkdir blog && cd blog npm install express --save touch app.js

因为看见node_modules/express下的package.json文件里 有 body-parser 那么想当然的 就去了node_modules/express下 npm install了 以为在app.js引入时 有类似这样的引入方式 require(“express”) require(“express.body-parser”) 想当然的以为 我既然已经补全了 这个局部express的中间件 那么自然可以通过express来定位到它的中间件,不知道是不是我想太多了 毕竟官方剥离了body-parser


3 回复

Nodejs的局部模块引入方式

在Node.js中,引入局部模块(即位于node_modules目录下的模块)通常可以通过简单的相对路径或直接使用模块名来完成。如果你安装了一个全局模块,并且该模块依赖于其他局部模块,你可能会遇到一些引入上的问题。

示例项目结构

假设你的项目结构如下:

blog/
├── node_modules/
│   ├── express/
│   └── body-parser/
├── app.js
└── package.json

安装Express及其依赖

当你通过npm install express --save安装Express时,body-parser作为其依赖也会被安装到node_modules目录下。为了确保所有依赖都被正确安装,你应该在项目根目录下运行安装命令。

mkdir blog && cd blog
npm init -y
npm install express --save

引入模块

  1. 引入核心模块

    const express = require('express');
    
  2. 引入局部模块

    • 通常情况下,你可以直接通过模块名来引入:
      const bodyParser = require('body-parser');
      
    • 如果你在node_modules目录中安装了多个版本的相同模块,或者你想明确指定某个特定版本的模块,可以使用相对路径:
      const bodyParser = require('./node_modules/body-parser');
      

解释

  • 直接引入:Node.js会自动搜索node_modules目录以及父目录中的node_modules目录,因此你可以直接通过模块名来引入。
  • 相对路径:如果你有特殊需求,比如需要引入特定版本的模块,可以使用相对路径。但通常不推荐这样做,因为它会使代码变得复杂且难以维护。

追加说明

在你的例子中,你提到express依赖于body-parser。尽管expresspackage.json文件中可能包含对body-parser的依赖声明,但你不需要手动安装body-parserexpress子目录中。只需要确保在项目根目录下安装了expressbody-parser就会自动被安装到node_modules目录中。

const express = require('express');
const app = express();

// 使用body-parser中间件
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

这样,你就可以优雅地引入并使用局部模块了。


你还用的express 3.0吧。不需要require(‘body-parser’)。是这样用的: app.use(express.bodyParser()); 你看的教程应该是express4以上。body-parser等中间件从express里面剥离了,需要npm install body-parser, 然后直接require(‘body-parser’)。

在Node.js中,局部模块的引入通常指的是在一个项目中引入node_modules目录下的包。对于你提到的情况,直接从express包中引入body-parser中间件并不适用,因为body-parser已经被分离为独立的包。

优雅的引入方式

  1. 安装依赖 首先,确保你已经全局安装了expressbody-parser

    npm install express body-parser --save
    
  2. 引入模块 在你的app.js文件中,可以这样优雅地引入并使用body-parser中间件:

    const express = require('express');
    const bodyParser = require('body-parser');
    
    const app = express();
    
    // 使用body-parser中间件
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(bodyParser.json());
    
    app.get('/', (req, res) => {
      res.send('Hello World!');
    });
    
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    

解释

  • require语法:你可以直接通过名称引入模块,无需指定完整的路径。
  • body-parser:虽然它曾是express的一部分,但现在已经被分离出来成为一个独立的包,需要单独安装。
  • 中间件的使用body-parser提供了两个主要的中间件:urlencodedjson,用于解析请求体中的数据。

注意事项

  • 不要在express目录下手动安装body-parser,这会导致不必要的复杂性。
  • 确保所有依赖都通过npm install命令安装,并且在package.json中声明,以便其他开发者或部署环境能够准确复制你的开发环境。

这种方法不仅更加清晰、简洁,也符合现代Node.js项目的最佳实践。

回到顶部