Visual Studio代码- Node.js -找不到名称“__dirname”

hgc7kmma  于 2023-04-20  发布在  Node.js
关注(0)|答案(4)|浏览(308)

我不是一个专业的程序员,但尽管如此,在我的老板发现我在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...');
})

我的文件夹结构大致如下

  • 控制器
  • index.js
  • designs.js
  • 模型
  • designs.js
  • 前端
  • 共同的
  • layout.jade
  • header.jade
  • footer.jade
  • client.js
  • style.less
  • 指数
  • index.jade
  • client.js
  • style.less
  • 设计
  • index.jade
  • client.js
  • style.less
  • 建造
  • TMP
  • srv
  • app.js
  • build.js
  • package.json

根据VS Code的内置调试器,第8、14和15行有异常。这是我在整个项目中唯一使用__dirname的地方。这对我来说很烦人,因为我是一个完美主义者。是Node,VS Code,还是其他什么?

f8rj6qna

f8rj6qna1#

您收到的警告来自eslint extension。虽然它在Node.JS中可能有效,但它警告您有关__dirname,因为它在所有JavaScript环境(如浏览器)中无效。
要取消警告,您需要直接在项目的根目录下创建一个.eslintrc文件,并指示代码将在node中运行,如下所示:

{
    "env": {
        "node": true
    }
}

您可以在这里看到用于为实际的vscode代码库配置eslint的.eslint文件https://github.com/microsoft/vscode/blob/main/.eslintrc.json

vql8enpb

vql8enpb2#

迟到了,但也有同样的问题。对我来说,修复方法是添加节点类型,以便VSCode识别它们:
转到“终端”视图,然后输入以下内容:npm install @types/node --save-dev
然后点击Cmd + Shift + P(至少对于Mac)以调出VSCode命令搜索对话框,然后选择Reload Window
当它再次出现时,该错误和任何其他与Node.JS相关的内容都应该消失。

xoefb8l8

xoefb8l83#

除了创建一个单独的.eslintrc文件之外,您还可以将其添加到package.json文件中。
文档指出:
要在配置文件中指定环境,请使用env键,并通过将每个环境设置为true来指定要启用的环境。

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

ars1skjm4#

我在没有通过NPM或VSCode扩展安装ESLint的情况下遇到了同样的问题。你需要在你的项目中导入NodeJS类型包。
npm install @types/node --save-dev

相关问题