предисловие
делалwebpack
Контент, связанный с путем, используется много раз во время настройки.При написании проекта в последнее время есть файл, который необходимо загрузить в операционную систему Alibaba Cloud, а на локальном сервере также необходимо сохранить резервную копию файла. Контент, связанный с путями к файлам, и основной API Node используются много раз.path
модуль, поэтому я систематически изучил его и организовал эту статью.
Об авторе: koala, сосредоточив внимание на совместном использовании полного стека технологий Node.js, от JavaScript до Node.js, до серверной базы данных, я желаю вам стать отличным старшим инженером Node.js. [Руководство по развитию программиста] Автор, блог Github с открытым исходным кодомGitHub.com/koala-co Nth…
Классификация путей в узле
Пути в узле примерно разделены на 5 категорий,dirname
,filename
,process.cwd()
,./
,../
,вdirname
,filename
,process.cwd()
абсолютный путь
Каждая категория объясняется кодом:
Структура файлового каталога выглядит следующим образом:
代码pra/
- node核心API/
- fs.js
- path.js
код в path.js
const path = require('path');
console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log(path.resolve('./'));
Запустите команду в каталоге кода pranode node核心API/path.js
, мы можем увидеть результат следующим образом:
/koala/Desktop/程序员成长指北/代码pra/node核心API
/koala/Desktop/程序员成长指北/代码pra/node核心API/path.js
/koala/Desktop/程序员成长指北/代码pra
/koala/Desktop/程序员成长指北/代码pra
Тогда у нас естьnode核心API目录下
запустить этот файл,node path.js
, Результаты приведены ниже:
/koala/Desktop/程序员成长指北/代码pra/node核心API
/koala/Desktop/程序员成长指北/代码pra/node核心API/path.js
/koala/Desktop/程序员成长指北/代码pra/node核心API
/koala/Desktop/程序员成长指北/代码pra/node核心API
Сравнивая полученные результаты, можно сделать предварительный вывод, что
- __dirname: всегда возвращает абсолютный путь к папке, в которой находится исполняемый js
- __filename: всегда возвращает абсолютный путь к выполненному js
- process.cwd(): всегда возвращает абсолютный путь к папке, в которой была запущена команда node.
- ./: то же, что и process.cwd(), возвращает абсолютный путь к папке, в которой находилась команда node.
Почему вы говорите, что это временное заключение, потому что есть ошибка, посмотрите на кусок кода: Добавляем этот код в path.js
exports.A = 1;
Перед чтением пути к файлу напрямую через readFile сообщалось об ошибке.
fs.readFile('./path.js',function(err,data){
});
Теперь добавьте эти две строки кода в файл fs.js, который только что сообщил об ошибке:
const test = require('./path.js');
console.log(test)
существует代码pra/
запустить в каталогеnode node核心API/fs.js
, и, наконец, проверьте результат, указав, что он доступен:
{ A: 1 }
Так о./
Правильный вывод такой:
существуетrequire()
используется в__dirname
Эффект тот же, и он не изменится, потому что каталог запуска скрипта другой, в остальных случаях он такой же, какprocess.cwd()
Эффект тот же, путь относительно каталога, в котором находится сценарий запуска.
Резюме знаний пути:
-
__dirname
: получить полное имя каталога, в котором находится текущий исполняемый файл. -
__filename
: получить имя файла с полным абсолютным путем к текущему исполняемому файлу. -
process.cwd()
: получить имя каталога папки, когда команда node выполняется в данный момент. -
./
: Когда не используется требование,./
а такжеprocess.cwd()
то же самое, используйтеrequire
когда, с__dirname
Такой же
Относительные пути (./, ../) используются только в функции require(), а абсолютные пути используются в других местах, как показано ниже:
// 当前目录下
path.dirname(__filename) + '/path.js';
// 相邻目录下
path.resolve(__dirname, '../regx/regx.js');
path
Сравнение путей было объяснено ранее.Далее мы поговорим о модуле пути отдельно.Этот модуль обычно используется во многих местах.Поэтому для нас будет полезнее для нашего будущего развития освоить его,не глядя на настройка вебпака каждый раз.В файле так же нужно проверять для чего используется этот апи, что сильно влияет на нашу эффективность.
Это адрес официального сайта API:узел будет .org/API/path.Контракт...
Лично я не думаю, что необходимо осваивать все API на официальном сайте.Далее будут описаны некоторые часто используемые API, которые я часто использую, или которые я часто использую в качестве разработчика интерфейса при настройке таких проектов, как веб-пакет.
path.normalize
Например
const path = require('path');
console.log(path.normalize('/koala/Desktop//程序员成长指北//代码pra/..'));
нормализованный результат
/koala/Desktop/程序员成长指北/代码pra
Сводка действий
Нормализовать пути, нормализовать нестандартные пути.
path.join
Например
const path = require('path');
console.log(path.join('src', 'task.js'));
const path = require('path');
console.log(path.join(''));
преобразованный результат
src/task.js
.
Сводка действий
path.join([...paths])
- Передаваемый параметр представляет собой фрагмент пути строки, который может быть одним или несколькими
- Возвращается склеенный путь, но в зависимости от платформы он будет нормализовать путь по-разному, например,
Unix
система/
,Windows
система\
, то результаты возврата, которые вы видите в двух системах, будут разными. - Если длина возвращаемой строки пути равна нулю, она вернет
.
, который представляет текущую папку. - Если какой-либо из входящих параметров не является строкой, об ошибке будет сообщено напрямую
path.parse
Например
const path = require('path');
console.log(path.parse('/koala/Desktop/程序员成长指北/代码pra/node核心API'));
результат операции
{ root: '/',
dir: '/koala/Desktop/程序员成长指北/代码pra',
base: 'node核心API',
ext: '',
name: 'node核心API'
}
Сводка действий
То, что он возвращает, является объектом, так что давайте познакомимся с этими терминами:
- root: представляет корневой каталог
- dir: представляет папку, в которой находится файл
- base: представляет весь файл
- имя: представляет имя файла
- ext: представляет суффикс имени файла
path.basename
Например
const path = require('path');
console.log(path.basename('/koala/Desktop/程序员成长指北/代码pra/node核心API'));
console.log(path.basename('/koala/Desktop/程序员成长指北/代码pra/node核心API/path.js', '.js'));
результат операции
Глядя на пример приведенного выше кода, я думаю, что должен знать результат базового имени, хе-хе.
node核心API
path
Сводка действий
basename принимает два параметра, первыйpath
, второйext
(необязательный параметр), при вводе второго параметра имя суффикса не отображается в результатах печати
path.dirname
Например
const path = require('path');
console.log(path.dirname('/koala/Desktop/程序员成长指北/代码pra/node核心API'));
результат операции
/koala/Desktop/程序员成长指北/代码pra
Сводка действий
Возвращает полный адрес каталога файла
path.extname
Например
const path = require('path');
path.extname('index.html');
path.extname('index.coffee.md');
path.extname('index.');
path.extname('index');
path.extname('.index');
результат операции
.html
.md
.
''
''
Сводка действий
Имя суффикса возвращается, но два последних случая возвращают '', обратите внимание.
path.resolve
Например
const path = require('path');
console.log(path.resolve('/foo/bar', '/bar/faa', '..', 'a/../c'));
выходной результат
/bar/c
Сводка действий
path.resolve([...paths])
path.resolve эквивалентен следующей оболочкеcd
операция, бег слева направоcd path
Команда, наконец получен абсолютный путь/имя файла, результат, возвращаемый этим интерфейсом. ноresolve
операция иcd
Операция все-таки другая.resolve
Путь может отсутствовать, а последней записью может быть файл. специфическийcd
Действуйте следующим образом
cd /foo/bar/ //这是第一步, 现在的位置是/foo/bar/
cd /bar/faa //这是第二步,这里和第一步有区别,他是从/进入的,也就时候根目录,现在的位置是/bar/faa
cd .. //第三步,从faa退出来,现在的位置是 /bar
cd a/../c //第四步,进入a,然后在推出,在进入c,最后位置是/bar/c
path.relative
Например
const path = require('path');
console.log(path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'));
console.log(path.relative('/data/demo', '/data/demo'));
console.log(path.relative('/data/demo', ''));
результат операции
../../impl/bbb
""
../../koala/Desktop/程序员成长指北/代码pra/node核心API
Сводка действий
path.relative(from, to)
Описание: относительный путь от пути «от» к пути «до».
граница:
- Если from и to указывают на один и тот же путь, верните пустую строку.
- Если значение from или to пусто, возвращается текущий рабочий путь.
Суммировать
Знания о путях из этой статьи здесь.Основа очень важна, что может не только сэкономить время разработки, но и уменьшить количество ошибок.
Так много, чем можно поделиться сегодня.Если вы заинтересованы в общем контенте, вы можете подписаться на официальную учетную запись «Руководство по развитию программиста» или присоединиться к группе технического обмена, чтобы обсудить его вместе.
Маршрут передовых технологий