繁体   English   中英

我如何正确要求同一目录中的JS文件?

[英]How do I require JS files within the same directory properly?

我在理解require()如何在JS中工作时遇到了麻烦。

这是我遇到的问题:

我的文件夹结构如下所示:

test

  ->test

    ->a.js

    ->b.js

    ->c.js

这是我在每个文件中拥有的代码:

c.js

function c() {
  console.log("c")
}

module.exports = c;

b.js

let c = require("./c");

function b() {
  c();
  console.log("b");
}

exports.b = b;

a.js

let b = require("./test/b")

当我在a.js执行代码时,它运行良好。

但是当我在b.js执行代码时,会引发错误:

module.js:472
    throw err;
    ^

Error: Cannot find module './c'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at [stdin]:3:9
    at ContextifyScript.Script.runInThisContext (vm.js:23:33)
    at Object.runInThisContext (vm.js:95:38)
    at Object.<anonymous> ([stdin]-wrapper:6:22)
    at Module._compile (module.js:571:32)
    at evalScript (bootstrap_node.js:391:27)

但是当我将b.js的内容更改为:

let c = require("./test/c");

function b() {
  c();
  console.log("b");
}

module.exports = b;

现在, a.js引发错误:

module.js:472
    throw err;
    ^

Error: Cannot find module './test/c'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/sp/Desktop/test/test/b.js:1:71)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)

我不明白什么?

节点从它的require()文件中寻找module对象。 专门查看module.exports

// File a.js
const foo = "Hello"
module.exports = foo

// File b.js
const bar = "World"
module.exports = bar

// File index.js
const a = require('./a')
const b = require('./b')

console.log(a, b) //Hello World

您还可以导出对象

module.exports = { foo, bar }

您这样导入的

const { foo, bar} = require("./file")

当您不指定位置时,它会在node_modulesnode_modules

const express = require('express') // Looks inside node_modules for express

我假设您都是从/test/根目录运行它们。

从根目录运行a.js./test/b /test/test/b指向/test/test/b

从根目录运行b.js./c /test/c指向/test/c ,该目录不存在。

当您从根目录运行a.js时,它需要b.js./test/b ,然后需要c.js通过./c从其自己的目录进入相对路径,这就是为什么如果您运行a.js则它可以工作的原因。

现在运行b.js从上/test/目录结果b.js寻找c.js/test/c ,而不是/test/test/c

更改b.jslet c = require("./test/c"); 导致以下情况:

a.js仍然需要b.js aka /test/test/b ./test/b 现在, b.js尝试从./test/c要求指向不存在的/test/test/test/c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM