Bower và devDependencies vs phụ thuộc


159

Tôi đã chạy 'yo angular' và sau đó nhận ra rằng nó đã cài đặt 1.0.8, tôi đã gỡ cài đặt các thành phần góc, tuy nhiên tệp bower.json ban đầu có kịch bản góc và kịch bản góc dưới 'devDependencies' khi tôi thêm lại tất cả 1.2. Các thành phần 0-RC.2 góc cạnh và kịch bản góc dưới sự phụ thuộc thay vì devDependencies.

Tôi tò mò về cách sử dụng devDependencies và liệu tôi có nên tự sửa nó hay để nguyên như vậy không. Có cách nào để xác định CLI Bower làm thế nào để đánh dấu một cái gì đó là phụ thuộc dev không?

Sau khi chỉnh sửa tập tin:

{
    name: "Angular",
    version: "0.0.0",
    dependencies: {
        json3: "~3.2.4",
        jquery: "~1.9.1",
        bootstrap-sass: "~2.3.1",
        es5-shim: "~2.0.8",
        angular-mocks: "1.2.0-rc.2",
        angular-sanitize: "1.2.0-rc.2",
        angular-resource: "1.2.0-rc.2",
        angular-cookies: "1.2.0-rc.2",
        angular: "1.2.0-rc.2",
        angular-scenario: "1.2.0-rc.2"
    },
    devDependencies: { }
}

Trước khi chỉnh sửa:

{
    "name": "Angular",
    "version": "0.0.0",
    "dependencies": {
        "angular": "~1.0.7",
        "json3": "~3.2.4",
        "jquery": "~1.9.1",
        "bootstrap-sass": "~2.3.1",
        "es5-shim": "~2.0.8",
        "angular-resource": "~1.0.7",
        "angular-cookies": "~1.0.7",
        "angular-sanitize": "~1.0.7"
    },
    "devDependencies": {
        "angular-mocks": "~1.0.7",
        "angular-scenario": "~1.0.7"
    }
}

Câu trả lời:


284

devDependencies dành cho các tập lệnh liên quan đến phát triển, ví dụ kiểm thử đơn vị, tập lệnh đóng gói, tạo tài liệu, v.v.

dependencies được yêu cầu cho sử dụng sản xuất và cũng được yêu cầu cho dev.

Bao gồm cả devDependenciesbên trong dependencies, như bạn có nó, sẽ không có hại; mô-đun sẽ chỉ gói nhiều tệp (byte) hơn trong quá trình cài đặt - tiêu tốn nhiều tài nguyên (không cần thiết) hơn. Từ một POV thuần túy, các byte bổ sung này có thể gây bất lợi, chỉ phụ thuộc vào quan điểm của bạn.

Để làm sáng tỏ, nhìn vào bower help install, các mô-đun được liệt kê dưới đây devDependenciescó thể được bỏ qua trong quá trình cài đặt mô-đun qua -phoặc --production, ví dụ:

bower install angular-latest --production

Đây là cách được đề xuất để thực hiện cài đặt cho bất kỳ thứ gì ngoài nền tảng phát triển.

Ngược lại, không có cách nào để bỏ qua các mô-đun được liệt kê dưới đây dependencies.


Kể từ bower@1.2.7 (xem nguồn mới nhất của Bower ), bower helpsản lượng:

Usage:

    bower <command> [<args>] [<options>]

Commands:

    cache                   Manage bower cache
    help                    Display help information about Bower
    home                    Opens a package homepage into your favorite browser
    info                    Info of a particular package
    init                    Interactively create a bower.json file
    install                 Install a package locally
    link                    Symlink a package folder
    list                    List local packages
    lookup                  Look up a package URL by name
    prune                   Removes local extraneous packages
    register                Register a package
    search                  Search for a package by name
    update                  Update a local package
    uninstall               Remove a local package

Options:

    -f, --force             Makes various commands more forceful
    -j, --json              Output consumable JSON
    -l, --log-level         What level of logs to report
    -o, --offline           Do not hit the network
    -q, --quiet             Only output important information
    -s, --silent            Do not output anything, besides errors
    -V, --verbose           Makes output more verbose
    --allow-root            Allows running commands as root

See 'bower help <command>' for more information on a specific command.

và hơn nữa, bower help installsản lượng (xem nguồn mới nhất ):

Usage:

    bower install [<options>]
    bower install <endpoint> [<endpoint> ..] [<options>]

Options:

    -F, --force-latest      Force latest version on conflict
    -h, --help              Show this help message
    -p, --production        Do not install project devDependencies
    -S, --save              Save installed packages into the project's bower.json dependencies
    -D, --save-dev          Save installed packages into the project's bower.json devDependencies

    Additionally all global options listed in 'bower help' are available

Description:

    Installs the project dependencies or a specific set of endpoints.
    Endpoints can have multiple forms:
    - <source>
    - <source>#<target>
    - <name>=<source>#<target>

    Where:
    - <source> is a package URL, physical location or registry name
    - <target> is a valid range, commit, branch, etc.
    - <name> is the name it should have locally.

Có cách nào để Bower tự động xóa các deps không cần thiết khi bạn xóa chúng khỏi bower.json không?
FutuToad

1
@FutuToad, tôi đã không thử nhưng một bower update(để có phiên bản mới nhất với các bản cũ bị xóa) theo sau là bower prune(xóa các gói nội bộ không liên quan) có thể thực hiện thủ thuật.
zamnuts

1
@MichaelTrouw điều này là không thể vì cấu trúc thư mục là cơ bản. Tôi khuyên bạn nên thực hiện cài đặt sản xuất trong một thư mục khác trên máy phát triển của bạn (hoặc môi trường dàn dựng khác) tải lên ảnh chụp nhanh qua FTP tới mục tiêu.
zamnuts


1
@Edgar mã sản xuất của bạn KHÔNG nên phụ thuộc vào bạn devDependencies, và do đó không phải là một phần của mã bootstrap, logic, cũng như bất kỳ khía cạnh nào khác của ứng dụng của bạn khi chạy bình thường. Chỉ khi bạn cố chạy các tác vụ liên quan đến nhà phát triển (xây dựng tập lệnh, bộ kiểm tra, v.v.), bạn sẽ nhận được mô-đun không tìm thấy. Nếu bạn cần thêm thông tin, xin vui lòng đặt câu hỏi mới về SO. Cuối cùng, hãy xem xét việc di chuyển khỏi bower vì nó không được chấp nhận nhiều: github.com/bower/bower/issues/2298
zamnuts
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.