Bower和devDependencies与dependencies的区别

160

我运行了'yo angular',后来意识到它安装的是1.0.8版本。我卸载了angular组件,但原先的bower.json文件在“devDependencies”下有angular-mocks和angular-scenario,在重新添加所有1.2.0-rc.2组件时,将angular-mocks和angular-scenario从“devDependencies”中移至“dependencies”。

我想知道如何使用devDependencies,并且是否应该手动修复它或保留原样。是否有一种方法可以在bower CLI上指定如何标记某个内容为devDependency?

编辑过的文件:

{
    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: { }
}

Before Edits:

{
    "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"
    }
}
1个回答

287

devDependencies是用于开发相关脚本的,例如单元测试、打包脚本、文档生成等。

dependencies是生产环境所必需的,而且也假定在开发中需要使用。

devDependencies包含在dependencies中不会有害,模块仅会在安装期间捆绑更多文件(字节)-消耗更多(不必要的)资源。从纯粹主义的角度来看,这些额外的字节可能是有害的,这取决于您的观点。

为了阐明一些问题,查看bower help install,列在devDependencies下面的模块可以通过-p--production在模块安装期间省略,例如:

bower install angular-latest --production

除了开发平台,这是执行安装的推荐方式。

相反地,在dependencies下列出的模块无法省略。


截至bower@1.2.7(请参见最新的bower源代码),bower help命令输出:

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.

而且,bower help install 提供的输出结果是(请参见最新源代码):

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.

1
@FutuToad,我没有尝试过,但是执行bower update(获取最新版本并删除旧依赖项)然后跟着执行bower prune(删除多余的本地包)可能会解决问题。 - zamnuts
1
@MichaelTrouw 这是不可能的,因为目录结构是根本性的。我建议在开发机器(或其他暂存环境)上的另一个目录中执行生产安装,然后通过 FTP 将其快照上传到目标位置。 - zamnuts
@zamnuts 不错的解决方案。也可以自动化(最好在副本上自动化,而不是在开发机器上)。 - Michahell
1
@Genu,是的,你可以:https://github.com/blittle/bower-installer#ignore-files 查看 SO 问题 Filter (include/exclude) files for Bower dependency - zamnuts
1
@Edgar,你的生产代码不应该依赖于你的devDependencies,因此在正常运行应用程序时,它不是你的引导代码、逻辑或任何其他方面的一部分。只有当你尝试运行与开发相关的任务(构建脚本、测试套件等)时,你才会收到模块未找到的错误。如果你需要进一步的信息,请在SO上提出一个新问题。最后,请考虑迁移到其他工具,因为Bower已经基本被弃用了:https://github.com/bower/bower/issues/2298 - zamnuts
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接