Visual Studio Code - Node.js - 无法找到名称 '__dirname'

7

首先说明一下,我不是专业程序员,但是我的老板找到我后知道我在10年前上过高中的“网页设计”课程后就让我建一个网站。当时静态网站已经足够,甚至CSS也只是开始展现其潜力,但这不是重点。

我现在正在Visual Studio Code上开发一个Node.js项目,但出现了奇怪的异常。虽然代码能正常运行,但我还是好奇想解决这个问题。以下是我的代码:

app.js

var express = require('express'),
app = express(),
bodyParser = require('body-parser'),
multer = require('multer'),
controller = require('./controllers');

//Sets the view engine to jade.
app.set('views', __dirname + '/frontend');
app.set('view engine', 'jade');

//sets up the development enviroment
if (app.get('env') === 'development') {
  app.locals.pretty = true;
  app.use(express.static(__dirname + '/build/public'))
  var build = require(__dirname + '/build.js');
  app.use('css/*', function(req, res, next){
    build.style();
    next();
  });
}

//Sets up the public directory to serve static files - This will be depricated quite soon...
//app.use(express.static(__dirname + '/public'));

//Initalizes site-wide local variables
//app.set('title', 'Halvorson Homes');

//Sets up body-parser to be able to read RESTful requests
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(multer({dest: 'tmp'}).fields());

//Load Controllers
app.use( '/' , controller);


//makes the app listen on port 3000
app.listen(3000, function() {
  console.log('Listening on port 3000...');
})

我的文件夹结构基本上如下所示:
  • controllers
    • index.js
    • designs.js
  • models
    • designs.js
  • frontend
    • common
      • layout.jade
      • header.jade
      • footer.jade
      • client.js
      • style.less
    • index
      • index.jade
      • client.js
      • style.less
    • designs
      • index.jade
      • client.js
      • style.less
  • build
    • tmp
    • srv
  • app.js
  • build.js
  • package.json
根据VS Code内置调试器,第8、14和15行都存在异常。这是整个项目中我唯一使用__dirname的地方。对于我这种完美主义者来说,这非常烦人。这是Node、VS Code还是其他原因造成的呢?

请提供您的文件夹结构。您是否安装了typings并创建了jsconfig?请查看以下链接以获取有关如何设置项目的详细信息。 - Dauren Akilbekov
3个回答

10

你收到的警告来自于eslint扩展程序。尽管它在Node.JS中可能是有效的,但它正在警告你关于__dirname,因为在一些JavaScript环境中,例如在浏览器中,它是无效的。

要消除这个警告,你需要在项目的根目录下创建一个.eslintrc文件,并指示代码将在node中运行,如下所示:

{
    "env": {
        "node": true
    }
}
你可以在这里看到用于配置实际 vscode 代码库的 .eslint 文件,链接为:https://github.com/microsoft/vscode/blob/main/.eslintrc.json

8

虽然有些晚,但我也遇到了同样的问题。我的解决方法是添加节点类型以便VSCode能够识别它们:

进入终端视图,然后输入以下内容: npm install @types/node --save-dev

然后按下 Cmd + Shift + P (至少在Mac上如此)来打开VSCode命令搜索对话框,然后选择 Reload Window

重新出现时,该错误以及任何与Node.JS相关的未被识别的问题都应该已经消失了。


0

除了创建单独的.eslintrc文件外,您还可以将其添加到package.json文件中。

文档中提到:

要在配置文件中指定环境,请使用env键,并通过将每个环境设置为true来指定要启用的环境。例如,以下内容启用浏览器和Node.js环境

{
    "name": "mypackage",
    "version": "0.0.1",
    "eslintConfig": {
        "env": {
            "browser": true,
            "node": true
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接