2013-08-20 28 views
33

Sau grunt build nhập ứng dụng AngularJS của tôi vào thư mục dist của tôi, tôi muốn thử nghiệm nó với grunt server. Vấn đề là grunt server chỉ phục vụ tất cả mã trong thư mục app/ của tôi. Ngoài ra, hãy nhớ rằng tôi đã tạo ứng dụng của mình với yo angular.Làm thế nào để chạy máy chủ grunt trong thư mục dist thay vì thư mục ứng dụng?

Đây là máy chủ đang nhiệm vụ trong Gruntfile.js tôi

grunt.registerTask('server', [ 
    'clean:server', 
    'coffee:dist', 
    'compass:server', 
    'livereload-start', 
    'connect:livereload', 
    'open', 
    'watch' 
    ]); 

Có cách nào để làm cho grunt server chỉ phục vụ tối đa các mã được xây dựng trong thư mục dist/ của tôi?

Trả lời

28

Có hay không bạn có thể làm điều đó không quan trọng. Điều quan trọng là bạn không nên sử dụng máy chủ grunt cho việc này. Nhiệm vụ của máy chủ trong grunt là bạn có thể thấy nhiều thứ mà bạn không cần trong thư mục dist, cũng như thực tế là tất cả chúng sẽ được mã hóa cứng cho thư mục ứng dụng của bạn.

Nếu bạn chỉ muốn thử kết quả của thư mục dist, những gì bạn cần làm chỉ là cd vào thư mục dist và sau đó bắt đầu một máy chủ HTTP đơn giản giống như máy chủ đi kèm với python.

python -m SimpleHTTPServer 

Điều đó sẽ bắt đầu một máy chủ nhỏ để bạn thử thư mục địa phương.

+1

Đó là những gì tôi làm. Tôi cũng đôi khi có thư mục dist symlinked (hoặc thực sự chỉ vào) một apache kiểm soát thư mục để tôi có thể phục vụ nó như là một vhost cục bộ thats gần với máy chủ sản xuất thực tế của tôi. Một điều bạn có thể/nên làm liên quan đến điều này là chạy thư mục dist của bạn thông qua thử nghiệm của bạn để đảm bảo các tệp được xây dựng thực sự giống nhau (chỉ được rút gọn) dưới dạng tệp nguồn. –

+0

@DerekR Cảm ơn lời khuyên đó. Tôi sẽ thử nó. Cảm ơn có, nó hoạt động :) –

+0

@Eddie Monge Jr Làm thế nào để chạy thư mục dist của tôi thông qua thử nghiệm của tôi? Không chắc chắn 'thử nghiệm của tôi' có nghĩa là gì. Tò mò để tìm hiểu mặc dù. –

3

Mặc dù những người khác không khuyên làm điều này, tôi tin rằng đây là những gì bạn đang tìm kiếm. Tôi làm một cái gì đó như thế này trong tập tin server.js của tôi khi sử dụng express.

if (process.env.NODE_ENV == 'production') { 
    app.use(express.static('/dist')); 
}else{ 
    app.use(express.static('/app'));  
} 

Hy vọng điều này sẽ hữu ích!

+2

tại sao họ sẽ khuyên bạn nên chống lại điều này. –

114

Câu trả lời rất ngắn gọn là

grunt serve:dist 

đó làm việc với yeoman tạo của tôi Gruntfile.js chứa:

grunt.registerTask('serve', function (target) { 
    if (target === 'dist') { 
     return grunt.task.run(['build', 'connect:dist:keepalive']); 
    } 

    grunt.task.run([ 
     'clean:server', 
     'bower-install', 
     'concurrent:server', 
     'autoprefixer', 
     'connect:livereload', 
     'watch' 
    ]); 
    }); 
+10

Ehm ... Tôi nghĩ đây là câu trả lời đúng! – Juanma

3

Câu trả lời grunt serve:dist là điều đúng, nhưng quá trình này là khá khó chịu vì bạn cần phải biên dịch toàn bộ dự án của bạn vào chế độ sản xuất mỗi khi bạn gọi grunt phục vụ: dist.

Điều tôi đã làm là sửa đổi Gruntfile.js trong tác vụ serve, xóa tác vụ build khỏi tham số được gửi đến run. Trước tiên, bạn cần phải xây dựng theo cách thủ công bằng grunt hoặc grunt build và sau đó gọi grunt serve:dist và mở URL theo cách thủ công.

+0

Bạn có ví dụ về điều này không? Cảm ơn –

+0

tìm kiếm nhiệm vụ 'phục vụ', bạn sẽ có một điều kiện '' 'if (target === 'dist') {' '', bên trong nó sẽ trả về '' 'return grunt.task.run (['connect : dist: keepalive ']); '' ' –

+1

Dù sao để ngăn chặn nó khởi chạy một trình duyệt mới? – Stephane

Các vấn đề liên quan