Этот код также работает в Windows

ользую флаг--experimental-modules при запуске моего приложения узла для использования модулей ES6.

Однако, когда я использую этот флаг, метавария__dirname недоступно. Есть ли альтернативный способ получить ту же строку, которая хранится в__dirname что совместимо с этим режимом?

 kgangadhar14 окт. 2017 г., 16:17
Вот работа, чтобы получить__dirname работая в ES6, посмотрите

Ответы на вопрос(5)

Решение Вопроса

которая не требует создания нескольких файлов:

import path from 'path';

const __dirname = path.dirname(new URL(import.meta.url).pathname);
 GOTO 018 дек. 2018 г., 07:06
@DanDascalescu__dirname это не путь к каталогу процесса, это путь к каталогу текущего модуля.
 ViES07 июн. 2018 г., 05:01
Круто, но как настроить IDE WebStrom, чтобы понять этот синтаксис?
 Lokua23 дек. 2018 г., 21:11
Я пытался это решение в основном процессе электронов, но не смог переписать__dirname (угадывая только для чтения), так что в конечном итоге с помощьюconst dirname = ....
 GOTO 007 июн. 2018 г., 08:20
@ViES Я не знаю, но я нашелЭта проблема который уже исправлен, так что это должно быть возможно с последней версией, я думаю.
 Dan Dascalescu18 дек. 2018 г., 06:42
Каковы преимущества этого решения надpath.dirname(process.argv[1])?

./src/app.mjs:

app.set('views', path.join(path.resolve('./src'), 'views'));

Вот информация о моей папке организации:

./index.mjs

import server from './src/bin/www.mjs';
server.start();

./package.json

"scripts": {
    "start": "node --experimental-modules ./index.mjs"
},

Он возвращает правильные пути на моем компьютере с Windows, как__dirname.

Были предложения об экспонировании этих переменных черезimport.meta, но сейчас вам нужен хакерский обходной путь, который я нашелВот:

// expose.js
module.exports = {__dirname};

// use.mjs
import expose from './expose.js';
const {__dirname} = expose;
 robertklep08 авг. 2018 г., 19:58
@BananaAcid ты пробовал это?
 robertklep09 авг. 2018 г., 08:41
@BananaAcid не беспокойся, я не совсем уверен, почемуimport { __dirname } from ... не работает
 BananaAcid09 авг. 2018 г., 02:15
извини, ты прав - мой ответ основан на неверных предположениях.
import path from 'path';
const __dirname = path.join(path.dirname(decodeURI(new URL(import.meta.url).pathname)));

Я использовал:

import path from 'path';

const __dirname = path.resolve(path.dirname(decodeURI(new URL(import.meta.url).pathname)));

decodeURI было важно: использовались пробелы и другие вещи в пути на моей тестовой системе.

path.resolve() обрабатывает относительные URL.

 BananaAcid06 окт. 2018 г., 11:14
все еще есть проблемы с BABEL, он не примет import.meta, так как импорт там не принят :)

Ваш ответ на вопрос