nodejsimportexportexportsmodule.exports

Posted _less is more

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejsimportexportexportsmodule.exports相关的知识,希望对你有一定的参考价值。

1、import 和 export(ES6特性)

目录结构

export_file.js

export const myNumbers = [1, 2, 3, 4];
const animals = ['Panda', 'Bear', 'Eagle']; // Not available directly outside the module

export function myLogger() 
  console.log(myNumbers, animals);


export class Alligator 
   constructor() 
     // ...
   


let anotherNum = [3, 2, 1];
export  anotherNum, myLogger as Logger 

import_file.js

import * as Utils from './export_file.js';

console.log(Utils)

console.log(Utils.Logger())
console.log(Utils.myLogger())

package.json:这个文件很关键,表示import的是一个module,不然会报错


    "type": "module"

运行结果

也可以把import的方式换成

import myLogger, Logger, myNumbers as num from './export_file.js';

console.log(num)

console.log(Logger())
console.log(myLogger())

输出如下

如果把目录结构改成:export单独放,package.json和import文件一起


一样可以正常运行

如果把import单独放


则不能正常运行,会报错MODULE_NOT_FOUND


因此package.json是为了把import_file.js变成一个module,才能使用import

2、exports和require

用require导入一个module,不需要import_file.js自己是一个module,而exports本身将export_file.js以module的形式导出

目录结构

export_file.js

const getName = () => 
  return 'Jim';
;

const getLocation = () => 
  return 'Munich';
;

const dateOfBirth = '12.01.1982';

exports.getName = getName;
exports.getLocation = getLocation;
exports.dob = dateOfBirth;

import_file.js

const user = require('./export_file');

console.log(user.getName())
console.log(user.getLocation())
console.log(user.dateOfBirth)
console.log(user.dob)

console.log(
    `$user.getName() lives in $user.getLocation() and was born on $user.dob.`
);

输出

exports的方式改成如下也可以

exports.getName = () => 
  return 'Jim';
;

exports.getLocation = () => 
  return 'Munich';
;

exports.dob = '12.01.1982';

import中也可以指定导入哪些

const getName, getLocation, dob = require('./export_file');

console.log(getName())
console.log(getLocation())
console.log(dob)

console.log(
    `$getName() lives in $getLocation() and was born on $dob.`
);

3、module.exports和require

module.exports用于只导出一个,比如一个class

目录结构不变

export_file.js

class User 
  constructor(name='Jim', age='Munich', dob='12.01.1982') 
    this.name = name;
    this.age = age;
    this.dob = dob;
  

  getUserStats() 
    return `
      Name: $this.name
      Age: $this.age
      DateOfBirth: $this.dob
    `;
  


module.exports = User;

import_file.js,将export_file作为整体导入,即得到导出的class

const User = require('./export_file');

let myUser = new User();

console.log(
    myUser.getUserStats()
);

运行

也可以用的跟之前exports一样,导出一个dict,里面包含多项内容

module.exports = 
  getName: () => 
    return 'Jim';
  ,

  getLocation: () => 
    return 'Munich';
  ,

  dob: '12.01.1982',
;

import 仍然是

const getName, getLocation, dob = require('./export_file');

console.log(
    `$getName() lives in $getLocation() and was born on $dob.`
);

可以看到跟之前的结果是一样的

exports 和 module.exports 本质上是指向一个地方

比如下面三句是等价的

module.exports = 
  dob: '12.01.1982',
;

exports.dob = '12.01.1982';

module.exports.dob = '12.01.1982';

如果输出module来看
最终都会将dob加入到module的exports里面

但需要注意,在我们使用module.exports = dob: '12.01.1982';,是直接将一个object赋值给exports,这将会覆盖exports里的其他内容

以上是关于nodejsimportexportexportsmodule.exports的主要内容,如果未能解决你的问题,请参考以下文章