Должен ли я всегда заменять обратную косую черту прямой косой чертой в путях кросс-платформенной разработки на Node.js? - PullRequest
0 голосов
/ 26 января 2019

Однажды мой chokidar наблюдатель (обернутый в gulp.watch()) перестает работать.После экспериментов и отладки я обнаружил, что причиной является двойная обратная косая черта в глобах:

gulp.watch([
  'C:\\Users\\i\\projects\\test\\1_Source\\0_Development\\1_Markup/**/*.+(pug)',
  'C:\\Users\\i\\projects\\test\\1_Source\\1_Open\\1_Markup/**/*.+(pug)'
])

(Конечно, я не пишу абсолютные пути в вышеприведенных глобусах вручную - я создаю их программно.)

У меня почти нет опыта работы с операционными системами на основе UNIX, но я хочу, чтобы мой код работал кроссплатформенно.Если приведенный ниже код работает на каждой из Windows, Linux и Mac OS, я полагаю, что мне следует всегда преобразовывать обратную косую черту в прямую косую черту в моих программах Node.js - это самый безопасный способ.Верно ли мое предположение?

gulp.watch([
  'C:/Users/i/projects/test/1_Source/0_Development/1_Markup/**/*.+(pug)',
  'C:/Users/i/projects/test/1_Source/1_Open/1_Markup/**/*.+(pug)'
])

Кроме того, я обнаружил, что такие решения, как path.normalize(), не всегда дают желаемый результат.Является ли .replace(/\\/g, '/') единственным способом сохранения прямой косой черты только в путях?


Обновление: новые результаты эксперимента

Ничего из нижеприведенного не работает:

// --- 1
gulp.watch([
  'C:\\Users\\i\\projects\\test\\1_Source\\0_Development\\1_Markup\\**\\*.+(pug)',
  'C:\\Users\\i\\projects\\test\\1_Source\\1_Open\\1_Markup\\**\\*.+(pug)'
])

// --- 2
gulp.watch([
  path.normalize('C:\\Users\\i\\projects\\test\\1_Source\\0_Development\\1_Markup\\**\\*.+(pug)'),
  path.normalize('C:\\Users\\i\\projects\\test\\1_Source\\1_Open\\1_Markup\\**\\*.+(pug)')
])

// --- 3
gulp.watch([
  'C:\\Users\\i\\projects\\test\\1_Source\\0_Development\\1_Markup/**/*.+(pug)',
  'C:\\Users\\i\\projects\\test\\1_Source\\1_Open\\1_Markup/**/*.+(pug)'
])

// --- 4
gulp.watch([
  path.normalize('C:\\Users\\i\\projects\\test\\1_Source\\0_Development\\1_Markup/**/*.+(pug)'),
  path.normalize('C:\\Users\\i\\projects\\test\\1_Source\\1_Open\\1_Markup/**/*.+(pug)')
])

Но

gulp.watch([
  'C:/Users/i/projects/test/1_Source/0_Development/1_Markup/**/*.+(pug)',
  'C:/Users/i/projects/test/1_Source/1_Open/1_Markup/**/*.+(pug)'
])

работает.

...