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

Однажды мой наблюдатель за чокидаром 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)'
])

работает.

0 ответов

Другие вопросы по тегам