Глоток - как узнать относительную глубину пути? - PullRequest
0 голосов
/ 25 мая 2018

У меня есть проект в одном репозитории, который должен иметь основные файлы в корневой папке, которые используются во всем проекте, и отдельные папки тем, которые имеют свои уникальные настройки и процессы сборки.

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

core/
themes/
   some/long/folder/for/a/theme/root/
       theme-folders/
       gulpfile.js
   another/theme/folder/root/
       theme-folders/
       gulpfile.js
config.json

Каждая папка темы имеет свой собственный файл gulpfile.js.Когда я хочу запустить процесс gulp, я запускаю его из папки нужной темы.

Плагины Gulp и gulp, которые я использую, работают нормально только с относительными путями, и использование абсолютных путей не подлежит сомнению.Проблематично определить глубину каталога для относительных путей вручную, и я вместо этого хотел бы автоматизировать этот процесс.

Вопрос в том, как определить глубину каталога от одного файла gulpfile.js до корневого каталога проекта, где config.jsonрасположенный

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Основываясь на ответе Марка, я нашел собственное решение.Существует плагин для определения корневой папки приложения, который называется app-root-path.

.

const gulp = require('gulp');
const path = require('path');
const appRoot = require('app-root-path');

gulp.task('default', function () {

	// Function to calculate directory depth
	const dirDepth = (myDir) => {
		return myDir.split(path.sep).length;
	};

	console.log('Current directory = ' + __dirname);
	console.log('Root direcotry = ' + appRoot.path);
	console.log('Depth difference = ' + (dirDepth(__dirname) - dirDepth(appRoot.path)));

	var rel = '..' + path.sep;
	var depth = dirDepth(__dirname) - dirDepth(appRoot.path);
	var relPath = rel.repeat(depth);

	console.log('Relative path from current folder to root is: ' + relPath);

	var pkg = require(relPath + 'package.json');

	console.log('Test to see if it works: ' + pkg.name);
});
0 голосов
/ 27 мая 2018

Может быть, это может помочь.Используя эту структуру папок:

pathRelative  (the repository level)

├───core 
└───themes
    ├───a
│       └───b
│           └───c
│               └───d
│                   └───root
│                       └───theme-folders
    └───h
        └───i
            └───j
                └───root
                    └───theme-folders

const gulp = require('gulp');
const path = require('path');

// set the repository path
// I couldn't figure out a way to retrieve this programmatically

let cwdRoot = "C:\\Users\\Mark\\OneDrive\\Test Bed\\pathRelative"

gulp.task('default', function () {

  // get full path to current working root folder
  // fullPath = C:\Users\Mark\OneDrive\Test Bed\pathRelative\themes\a\b\c\d\root

  let fullPath = path.resolve();
  console.log("fullPath = " + fullPath);

  // get folders from the cwdRoot to the current working folder
  //  folders = pathRelative\themes\a\b\c\d\root

  let folders = path.relative( cwdRoot, fullPath );
  console.log("folders = " + folders);

  let folderDepth = folders.split(path.sep).length;
  console.log(folderDepth);

  // 6 for the themes/a/b/c/d/root
  // 5 for the themes/h/i/j/root
});
...