Để tăng tốc độ truy nhập đệ quy của hệ thống tệp, Bánh sử dụng tính năng .NET được tích hợp sẵn, do đó giới hạn của giới hạn 260 char cũ của Windows. Vì vậy, khi đó là một cường độ nhanh hơn trong hầu hết các trường hợp sử dụng nó không thành công trên cấu trúc thư mục quá sâu như các module Node có thể giới thiệu.
Bạn có thể giải quyết vấn đề này bằng cách lặp lại thư mục theo thư mục và áp dụng vị từ trên thư mục cần loại trừ trước khi nhập.
Trong ví dụ của tôi cấu trúc thư mục dưới đây được sử dụng
Repo directory
| build.cake
| test.sln
|
\---src
| test.sln
|
+---proj1
| | test.sln
| |
| \---node_modules
| node.sln
|
+---proj2
| | test.sln
| |
| \---node_modules
| node.sln
|
+---proj3
| | test.sln
| |
| \---node_modules
| node.sln
|
\---proj4
| test.sln
|
\---node_modules
node.sln
gì chúng tôi muốn là để tìm tất cả các giải pháp đệ quy từ thư mục repo không vào thư mục node_modules
và không tìm node.sln
Dưới đây là gợi ý giải pháp cho việc này là tạo phương thức tiện ích có tên là RecursiveGetFile
thực hiện điều này cho bạn:
// find and iterate all solution files
foreach(var filePath in RecursiveGetFile(
Context,
"./",
"*.sln",
path=>!path.EndsWith("node_modules", StringComparison.OrdinalIgnoreCase)
))
{
Information("{0}", filePath);
}
// Utility method to recursively find files
public static IEnumerable<FilePath> RecursiveGetFile(
ICakeContext context,
DirectoryPath directoryPath,
string filter,
Func<string, bool> predicate
)
{
var directory = context.FileSystem.GetDirectory(context.MakeAbsolute(directoryPath));
foreach(var file in directory.GetFiles(filter, SearchScope.Current))
{
yield return file.Path;
}
foreach(var file in directory.GetDirectories("*.*", SearchScope.Current)
.Where(dir=>predicate(dir.Path.FullPath))
.SelectMany(childDirectory=>RecursiveGetFile(context, childDirectory.Path, filter, predicate))
)
{
yield return file;
}
}
Kết quả của kịch bản này sẽ là một cái gì đó giống như
RepoRoot/test.sln
RepoRoot/src/test.sln
RepoRoot/src/proj1/test.sln
RepoRoot/src/proj2/test.sln
RepoRoot/src/proj3/test.sln
RepoRoot/src/proj4/test.sln
này khoảng trống vấn đề char 260 bằng cách bỏ qua các nhà sản xuất gặp khó khăn biết, sẽ không giải quyết được nếu đường dẫn không rõ khác có cùng một vấn đề.
Ví dụ ở đây: http://cakebuild.net/api/Cake.Common.IO/GlobbingAliases/2CDC8B98 Tôi thực sự rất vui khi tìm thấy nó khi nó xem xét để giải quyết vấn đề chính xác tôi đã có (node_modules). Có lẽ các tài liệu cần cập nhật nếu nó không giải quyết vấn đề này? –