Câu hỏi của tôi bắt đầu với nhau, hỏi ở đây: Gulp: How to set dest folder relative to processed file (when using wildcards)?Giải thích về đường dẫn nút liên quan đến nuốt chửng .pipe()
Tôi có một tình huống tương tự, nơi tôi cần phải thực hiện các phiên bản nén trên một cơ sở cho mỗi mô-đun. Đó là, tôi có
ui/test/one/script1.js
ui/test/two/script2.js
và tôi cần phải có ngụm sao chép các tập tin vào thư mục tương đối vì vậy tôi kết thúc với
ui/test/one/compressed/script1.js
ui/test/two/compressed/script2.js
Tôi đã sau nhiệm vụ ngụm
gulp.task('test', function() {
return gulp.src('ui/test/**/*.js')
.pipe(gulp.dest(function(file) {
return path.join(path.dirname(file.path), 'compressed');
}));
});
Tuy nhiên , khi tôi chạy nó, tôi kết thúc với
ui/test/one/compressed/one/script1.js
ui/test/two/compressed/two/script2.js
Tôi thấy trong số docs nơi có nội dung là
cwd - Chỉ định thư mục làm việc có liên quan đến. base - Chỉ định thư mục có liên quan đến cwd. Mặc định là nơi glob bắt đầu. Này được sử dụng để xác định tên tập tin khi lưu trong .dest()
Tôi có một số câu hỏi, đặc biệt là về .src()
, .dest()
và đường dẫn và tập tin đối tượng. (Tức là, mặc dù Tôi chắc rằng có nhiều cách khác để đạt được mục tiêu cuối cùng của tôi, câu hỏi này là cụ thể về hành vi của các mẫu mã ngụm ở trên và các chức năng đề cập vì vậy tôi có thể hiểu được hành vi và API của họ tốt hơn.)
Câu hỏi
- Khi các tài liệu nói "thư mục làm việc thư mục là liên quan đến", là những gì thư mục này?
- trên cùng lưu ý, liên quan đến this comment và tại chỗ trong các tài liệu mà nó nói "cơ sở -. Chỉ định thư mục tương đối so với cwd Mặc định là nơi glob bắt đầu" gì "nơi các glob bắt đầu" nghĩa là gì? Sự hiểu biết của tôi về 'glob' là nó là toàn bộ chuỗi, nhưng nó thực sự có nghĩa là một ký tự * trong chuỗi đó? Vì vậy, đối 'một số/thư mục/**/*. Js' với một tập tin hiện tại
some/folder/a/b/c/foo.js
Tôi không chắc chắn nếu cơ sở làsome/folder/
,some/folder/a/
, hoặcsome/folder/a/b/c/
? - là có một cách để nói
<where the glob begins> + '..'
? - nơi tôi đang nói path.join (path.dirname (file.path), 'nén') Tôi giả định đó là sản xuất
C:\blah\ui\test\one\compressed
. Nó sau đó rằng bất cứ quyết định của tên thực tế của các tập tin cóone\script1.js
trong tâm trí. Làm cách nào để thay đổi quyết định của mình để chỉ suy nghĩ vềscript1.js
?
Lưu ý: Tôi đã thử làm như sau (sử dụng ngụm-debug)
gulp.task('test', function() {
return gulp.src('ui/test/**/*.js', {cwd: './'})
.pipe(debug({minimal: false}))
.pipe(rename(function(path) {
path.basename = path.basename.substring(path.basename.lastIndexOf('\\') + 1);
}))
.pipe(debug({minimal: false}))
.pipe(gulp.dest(function(file) {
return path.join(path.dirname(file.path), 'compressed');
}));
});
Giao diện điều khiển đã cho kết quả sau cho phiên bản này của nhiệm vụ:
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\one\script1.js
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\one\script1.js
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\two\script2.js
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\two\script2.js
Vì vậy, có vẻ như việc đổi tên không có hiệu lực trên đường dẫn. Tôi cũng đã thử sửa đổi đường dẫn.dirname trong đổi tên đường ống, nhưng không thể tìm thấy bất cứ điều gì mà sẽ có tác dụng mong muốn của chỉ cần loại bỏ tên thư mục giả từ đường dẫn đầu ra cuối cùng.
Câu hỏi cuối cùng của tôi, sau đó, chính xác là những gì path.basename và path.dirname chứa cho đối tượng đường dẫn được chuyển đến hàm đổi tên?
chỉnh sửa: Tôi tìm thấy this về cách gỡ lỗi các tác vụ gulp. Làm như vậy với một tuyên bố debugger;
đặt trong hàm đổi tên cho phép tôi để kiểm tra các đối tượng đường, trông như thế này:
{
basename: "script1",
dirname: "one",
extname: ".js"
}
Thiết path.dirname để ''
trong các kết quả đổi tên trong
ui/test/compressed/script1.js
ui/test/compressed/script2.js
nên nó có thể là đổi tên() chính nó không hữu ích cho những gì tôi cần. Nó trông giống như các tùy chọn cơ sở để .src() có thể là nơi mà chìa khóa nằm, nhưng các tài liệu là khá terse.
Có vẻ như bạn đã tìm thấy cách sửa đổi đường dẫn theo cách bạn cần trong '.pipe' cuối cùng, vậy câu hỏi là gì? Tại sao không gulp cho phép kịch bản phi tiêu chuẩn ra khỏi hộp? –
@KirillSlatin Tôi kết thúc với 'ui/test/one/compressed/one/script1.js' trong đó những gì tôi cần là' ui/test/one/compressed/script1.js'. Cái thứ hai đó là cái tôi muốn tránh. Tôi đã sửa đổi công thức này https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-task-steps-per-folder.md và có thể nhận được những gì tôi cần, vì vậy nếu tiền thưởng hết hạn và không ai khác quan tâm đến nó bằng cách trả lời tôi sau đó sẽ đăng một câu trả lời với những gì tôi đã kết thúc với. Tôi đã kết thúc bằng cách sử dụng một băm trong đổi tên, đó chỉ là những gì tôi cần. – jinglesthula
Tôi nên lưu ý rằng nhận xét trước đó của tôi có liên quan đến kết quả cuối cùng và không có câu hỏi thực tế về .src() và .dest() và cách xử lý đường dẫn mà tôi thực sự yêu cầu ở đây. Vì vậy, tôi sẽ đăng những gì tôi tìm thấy trên câu hỏi khác mà nó thực sự là câu trả lời cho :) – jinglesthula