Основы webpack и node.js должны быть общей операцией модуля пути.

Node.js Webpack
Основы webpack и node.js должны быть общей операцией модуля пути.

предисловие

Студенты без соответствующего опыта часто встречаются с проблемами при изучении WebPack и используя узла.__dirname path.resolveИ т. Д., Тогда, как правило, выглядят невежественным заставляем это то, почему, почему, почему такая информация и нет упоминания о книгах, удивляясь, если я не знаю - -

На самом деле модуль пути очень распространен и универсален. Здесь я кратко обобщу некоторые методы, которые часто используются в проектах, чтобы помочь вам освоить их как можно быстрее.

1, Получить нормализованный путь/путь/имя файла/расширение

  • Получите нормализованный путь: path.normaliz(filepath)
  • Получите путь: path.dirname(filepath)
  • Получите имя файла: path.basename(filepath)
  • Получить расширение: path.extname(filepath)

1.1 Получить нормализованный формат пути

  • Метод path.normalize() нормализует заданный путь и анализирует фрагменты «..» и «.».
  • Когда найдено несколько последовательных разделителей пути (например, / в POSIX и \ или / в Windows), они заменяются одним разделителем пути (в POSIX это /, \ в Windows) замена. Множественные разделители в конце сохраняются.
  • Если путь является строкой нулевой длины, возвращает '.', представляющий текущий рабочий каталог.
path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// 返回: 'C:\\temp\\foo\\'

var myPath = path.normalize(__dirname + '/test/a//b//../c/helloWorld.js');
console.log(myPath); //windows: E:\workspace\NodeJS\app\fs\test\a\c\helloWorld.js

PS:

  • В Windows как «/», так и «\» могут представлять пути, но только «/» может использоваться для представления путей в сетевых ссылках.
  • Выдает TypeError, если путь не является строкой.

1.2 Получить путь, где вы находитесь

Примеры следующие:

var path = require('path');
var filepath = '/tmp/demo/js/test.js';

// 输出:/tmp/demo/js
console.log( path.dirname(filepath) );

var myPath = path.dirname(__dirname + '/test/util/helloWorld.js');
console.log(myPath);

//Users/cayley/Documents/webpack-demo/test/util

__dirname — это глобальная переменная в node.js, используемая для получения полного абсолютного пути к каталогу, в котором находится текущий файл модуля.

1.3 Получить имя файла

Строго говоря, path.basename(filepath) является лишь последней частью выходного пути и не определяет, является ли это именем файла.

Но в большинстве случаев мы можем использовать его как простой метод «получить имя файла».

var path = require('path');

// 输出:test.js
console.log( path.basename('/tmp/demo/js/test.js') );

// 输出:test
console.log( path.basename('/tmp/demo/js/test/') );

// 输出:test
console.log( path.basename('/tmp/demo/js/test') );

Что делать, если вы хотите получить только имя файла без расширения файла? Можно использовать второй параметр.

// 输出:test
console.log( path.basename('/tmp/demo/js/test.js', '.js') );

1.4 Получить расширение файла

Простой пример выглядит следующим образом:

var path = require('path');
var filepath = '/tmp/demo/js/test.js';

// 输出:.js
console.log( path.extname(filepath) );

Более подробные правила заключаются в следующем: (при условии, что path.basename(filepath) === B )

  • последний из Б.Начать усечение до последнего символа.

  • Если Б не существует., или первый символ B.После возврата пустой строки.

смотреть прямоофициальная документацияпример

path.extname('index.html')
// returns '.html'

path.extname('index.coffee.md')
// returns '.md'

path.extname('index.')
// returns '.'

path.extname('index')
// returns ''

path.extname('.index')
// returns ''

2, комбинация путей

  • path.join([...paths])

  • path.resolve([...paths])

2.1 path.join([...paths])

path.join()метод объединяет все заданные сегменты пути вместе, используя разделители, специфичные для платформы, иНормализуйте сгенерированный путь. Фрагменты пути нулевой длины игнорируются. Если объединенная строка пути является строкой нулевой длины, возвращается '.', указывающий текущий рабочий каталог.

Описание параметра:...paths <string>Последовательность фрагментов пути. вернуть:

ПучокpathsСоедините это вместе, а затем снова нормализуйте. Это означает, что пути сначала будут объединены, а затем нормализованы, чтобы вернуть правильный путь.

Примеры следующие:

var path = require('path');

// 输出 '/foo/bar/baz/asdf'
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');

Псевдокод определения пути выглядит следующим образом:

module.exports.join = function(){
  var paths = Array.prototye.slice.call(arguments, 0);
  return this.normalize( paths.join('/') );
};

Еще примеры:

path.join('/foo', 'bar', 'baz/asdf', 'quux', '.');          //  返回 /foo/bar/baz/asdf/quux, "."和"/"没什么影响
path.join('/foo', './bar', 'baz/asdf', '.', 'quux');        //  返回 /foo/bar/baz/asdf/quux
path.join('/foo', './bar', './baz/asdf', 'quux', '..');     //  返回 /foo/bar/baz/asdf
path.join('/foo', 'bar', 'baz/asdf', '.', '.');             //  返回 /foo/bar/baz/asdf
path.join('/foo', 'bar', 'baz/asdf', 'quux');               //  返回 /foo/bar/baz/asdf/quux
path.join('/foo', 'bar', 'baz/asdf', '..', '..');           //  返回 /foo/bar 

2.2 path.resolve([...paths])

Интеллектуальное разрешение абсолютных путейМетод path.resolve() преобразует путь или последовательность фрагментов пути в абсолютный путь. Иерархия идет слева направо.

规则:
1\. 给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径。
2\. 如果处理完全部给定的 path 片段后还未生成一个绝对路径,则当前工作目录会被用上。
3\. 生成的路径是规范化后的,且末尾的斜杠会被删除,除非路径被解析为根目录。
4\. 长度为零的 path 片段会被忽略。
5\. 如果没有传入 path 片段,则 path.resolve() 会返回当前工作目录的绝对路径。
6\. path.resolve将以/开始的路径片段作为根目录,在此之前的路径将会被丢弃,就像是在terminal中使用cd命令一样。而path.join只是简单的将该路径片段进行拼接

Напримерpath.resolve('/foo/bar', './baz')Это можно увидеть как результат следующей команды

cd /foo/bar
cd ./baz

Дополнительные примеры сравнения:

var path = require('path');

// 假设当前工作路径是 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path

// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path
console.log( path.resolve('') )

// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path
console.log( path.resolve('.') )

// 输出 /foo/bar/baz
console.log( path.resolve('/foo/bar', './baz') );

// 输出 /foo/bar/baz
console.log( path.resolve('/foo/bar', './baz/') );

// 输出 /tmp/file
console.log( path.resolve('/foo/bar', '/tmp/file/') );

// 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path/www/js/mod.js
console.log( path.resolve('www', 'js/upload', '../mod.js') );

Еще примеры:

// 当前工作目录与当前文件路径(F:/1/2/task6/test/dist)有区别
path.resolve();                               //  F:/1/2/task6/test 当前工作目录的绝对路径
path.resolve('./a');                          //  F:/1/2/task6/test/a 
path.resolve('../a');                         //  F:/1/2/task6/a
path.resolve('.');                            //  F:/1/2/task6/test 
path.resolve('..');                           //  F:/1/2/task6
path.resolve('/'));                           //  F:/
path.resolve('./a','../c/d');                 //  F:/1/2/task6/test/c/d
path.resolve('./a','./c/d');                  //  F:/1/2/task6/test/a/c/d
path.resolve('/a','../c/d');                  //  F:c/d
path.resolve('/a','./c/d');                   //  F:/a/c/d
path.resolve('./a','/b','./c/d');             //  F:/b/c/d
path.resolve('a','b','c/d');                  //  F:/1/2/task6/test/a/b/c/d
path.resolve('./a','./b','c/d');              //  F:/1/2/task6/test/a/b/c/d
path.resolve('./a','/b','c/d');               //  F:/b/c/d
path.resolve('./a/b','..','c/d');             //  F:/1/2/task6/test/a/c/d
path.resolve('./a','..','c/d');               //  F:/1/2/task6/test/c/d    

3, получить относительный путь

Интерфейс: path.relative(от, до)

Описание: изfromпуть кtoОтносительный путь пути.

граница:

  • еслиfrom,toуказывает на тот же путь, а затем возвращает пустую строку.

  • еслиfrom,toЕсли какой-либо из них пуст, то вернуть текущий рабочий путь.

Пример выше:

var path = require('path');

var p1 = path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
console.log(p1);  // 输出 "../../impl/bbb"

var p2 = path.relative('/data/demo', '/data/demo');
console.log(p2);  // 输出 ""

var p3 = path.relative('/data/demo', '');
console.log(p3);  // 输出 "../../Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path"

Ссылка и спасибо

Node Introductory Tutorial (8) Глава 6: Подробное объяснение модуля Path