Tự động tải lại ứng dụng Sails.js khi thay đổi mã?


107

Hiện tại, dường như đối với bất kỳ thay đổi mã nào trong ứng dụng sails.js, bạn phải dừng máy chủ sails theo cách thủ công và chạy sails liftlại trước khi bạn có thể thấy các thay đổi.

Tôi đã tự hỏi liệu có cách nào khi chạy ở chế độ phát triển để tự động khởi động lại máy chủ sails khi nó phát hiện thấy sự thay đổi mã không?

Câu trả lời:


74

Bạn phải sử dụng một trình theo dõi như vĩnh viễn , gật đầu , hoặc thứ gì đó khác ...

Thí dụ

  1. Cài đặt mãi mãi bằng cách chạy:

    sudo npm install -g forever

  2. Chạy nó:

    forever -w start app.js


Để tránh khởi động lại vô hạn vì Sails ghi vào .tmpthư mục, bạn có thể tạo một .foreverignoretệp vào thư mục dự án của mình và đưa nội dung này vào bên trong:

**/.tmp/**
**/views/**
**/assets/**

Xem sự cố trên GitHub: Mãi mãi khởi động lại vì /.tmp .


7
Bạn cũng có thể muốn thêm các chế độ xem vào .foreverignorevì chúng không yêu cầu khởi động lại để xem các thay đổi ngay lập tức. ví dụ**/views/**
Seth Malaki

nhưng không may là những điều này sẽ dẫn đến mã bootstrap được thực thi lại và mất phiên.
rahulserver

1
Tôi đã sử dụng cái này nhưng tôi nhận được cảnh báo sau: --minUptime chưa được đặt. Mặc định là: 1000ms. Làm cách nào để đặt biến này?
Golinmarq

47

Bạn có thể sử dụng sails-hook-autoreload

Chỉ cần nâng ứng dụng của bạn lên như bình thường và khi bạn thêm / thay đổi / xóa mô hình hoặc tệp bộ điều khiển, tất cả bộ điều khiển và mô hình sẽ được tải lại mà không cần phải hạ / tải lại ứng dụng.


1
Đây có vẻ là giải pháp đơn giản nhất / dễ dàng nhất. Cài đặt npm và thêm autoreload.js mẫu vào thư mục cấu hình và về cơ bản bạn đã hoàn tất.
Braintapper

1
Hoàn toàn tuyệt vời. Đơn giản nhất và có nguồn gốc từ Cánh buồm.
Alexus

Tôi bị Details: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint failném 5/lib/node_modules/sails/lib/hooks/orm/index.js:221khi tôi cứu (sử dụng buồm 11.3)
Gab

45

Ví dụ với nodemonđể xem các thư mục api và cấu hình

.nodemonignore nội dung

views/*
.tmp/*
.git/*

Chạy lệnh sau khi tạo .nodemonignore

$> nodemon -w api -w config

Ví dụ cho người giám sát bỏ qua 3 thư mục

$> supervisor -i .tmp,.git,views app.js

4
Tôi thích nodemongiải pháp hơn forevergiải pháp đưa ra cách nodemonđường ống xuất trở lại cấu hình bổ sung của stdout w / o. Giúp quy trình phát triển dễ dàng hơn.
Aaron Ransley

Đối với lệnh tôi chỉ sử dụng .nodemonignoreví dụ của bạn và chạy nodemon. Nó hoạt động cho đến nay.
Michael J. Calkins

Đối với bất kỳ ai khác bối rối về cách chạy các lần khởi chạy ở trên (tương đương với) sails lift, thì gật đầu biết cách sử dụng app.js.
Tyler Collier

9

Nếu đang sử dụng Sails 0.11, bạn có thể cài đặt hook này để tự động tải lại khi bạn thay đổi mô hình hoặc bộ điều khiển (chế độ xem không yêu cầu tải lại):

npm install sails-hook-autoreload

https://www.npmjs.com/package/sails-hook-autoreload


1
Điều này đã được đề cập trong câu trả lời trước đó của Vitalii Maslianok.
Tyler Collier

8

cài đặt nodemontoàn cầu hoặc cục bộ.

npm install nodemon --save
npm install nodemon -g

cài đặt sailscục bộ trong dự án của bạn như sau

npm install sails --save

sau đó thay đổi package.json

từ

"scripts": {
  "debug": "node debug app.js",
  "start": "node app.js"
},

đến

"scripts": {
   "debug": "node debug app.js",
   "start": "node app.js",
   "dev": "export NODE_ENV=development && nodemon --ignore 'tmp/*' app.js && exit 0"
},

sau đó

npm run dev

7

Tôi đã gặp vấn đề tương tự và tôi đã giải quyết nó bằng cách sử dụng grunt-watch và grunt-forever với các tác vụ sails @ beta. Kết quả là 4 lệnh grunt:

CẬP NHẬT: các nhiệm vụ có sẵn trong phiên bản buồm hiện tại (nó không còn là phiên bản beta nữa:>)

  • start Khởi động máy chủ
  • dừng Dừng máy chủ
  • khởi động lại Khởi động lại máy chủ
  • startWatch Khởi động máy chủ và đợi các thay đổi để khởi động lại nó (sử dụng grunt-watch). Đây có lẽ là giải pháp của bạn, nhưng các lệnh khác cũng hữu ích.

Đây là mã - Tôi đang sử dụng sails @ beta, bao gồm thư mục nhiệm vụ , tôi không biết liệu điều này có được bao gồm trong các phiên bản trước hay không:

  • Trước hết, bạn phải cài đặt vĩnh viễn trong thư mục sails của mình:

    npm install grunt-forever --save-dev
  • task / config / forever.js Định cấu hình tác vụ vĩnh viễn.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • task / config / watch.js ( chỉnh sửa ) Chỉnh sửa tác vụ đồng hồ để thêm quy tắc mới

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • task / register / watchForever.js Đăng ký các tác vụ tùy chỉnh của bạn (tệp này có thể được đổi tên thành bất kỳ thứ gì bạn muốn)

    module.exports = function(grunt) {
    // Starts server
      grunt.registerTask('start', [
        'compileAssets',
        'linkAssetsBuild',
        'clean:build',
        'copy:build',
        'forever:server:start'
      ]);
    
      // Restarts the server (if necessary) and waits for changes
      grunt.registerTask('startWatch', [
        'restart',
        'watch:server'
      ]);
    
      // Restarts server
      grunt.registerTask('restart', [
        'forever:server:restart'
      ]);
    
      // Stops server
      grunt.registerTask('stop', [
        'forever:server:stop'
     ]);
    };

Với điều này, bạn sẽ có thể sử dụng

    grunt startWatch

và đặt máy chủ của bạn đợi các thay đổi được khởi động lại:>

Hy vọng điều này đã giúp!


6

Tốt hơn bạn sử dụng

npm install -g nodemon

tôi đang sử dụng cái này và nó sẽ giúp cải thiện tốc độ phát triển của tôi. không cần chỉnh sửa bất kỳ tệp nào cho cái này !.

sau khi cài đặt

nodemon app.js

Nodemon rất tốt nếu bạn muốn khởi động lại máy chủ của mình cho mỗi lần lưu. Nhưng nếu bạn đang sử dụng webstorm hoặc bất kỳ lý tưởng nào có tính năng tự động lưu, nó sẽ tiếp tục khởi động lại máy chủ của bạn.
Vishnu KR

Chính xác là Mr.Vishnu KR.
BINFAS K

1

Đối với bất kỳ ai trả lời câu hỏi này bây giờ, có vẻ như điều này không còn cần thiết nữa - một ứng dụng được khởi chạy sails liftsẽ có tác vụ đồng hồ grunt đang chạy và các thay đổi mã sẽ hiển thị mà không cần khởi động lại.

Lúc đầu, tôi không nhận ra điều này đang xảy ra vì không có gì để chỉ ra điều gì đang xảy ra trong bảng điều khiển, nhưng nó dường như hoạt động mà không cần khởi động lại (tôi đang sử dụng Sails 0.11)


8
Tôi không nghĩ là như vậy, tôi vẫn phải khởi động lại buồm sau khi thay đổi bất kỳ bộ điều khiển nào
Fengd

Tôi cũng cần khởi động lại ứng dụng để xem các thay đổi của mình.
user1007522 19/11/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.