首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

为 Bluemix 上运行的 Node.js 应用程序自动收集法律报告(3)

为 Bluemix 上运行的 Node.js 应用程序自动收集法律报告(3)

第 4 步. 收集客户端依赖项(Bower 组件)Bower 是一个工具,使用它可以轻松地管理客户端依赖项。无需访问您想要使用的每个项目的站点并下载必要的库文件,您可创建一个 Bower                配置文件,自动完成此流程。
如果环境中没有 Bower,可按照这篇                  中的步骤设置它。
为您的项目安装并配置 Bower 后,所有客户端依赖项都存储在一个名为 bower.json 的文件中。确保项目中使用的所有客户端依赖项都是通过                Bower 添加的,而不是直接添加到页面中,这样所生成的报告才是准确无误的。
  • 要收集 Bower 依赖项,可将 bower-license Node                        模块添加到项目中。从项目的根目录中运行以下命令:
    1
    npm install bower-license --save-dev




  • 安装该插件后,在您的 license.js 文件中应使用以下 JavaScript 代码启用该插件:
    1
    var license = require('bower-license');




  • 加载此模块后,开始编码将使用 bower-license 的自定义任务。创建一个名为                    run_bower_license 的任务来收集所有依赖项并将结果输出到一个文件中。将以下代码添加到                    licenses.js 文件中。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    var license = require('bower-license'),
    fs = require('fs');

    module.exports = function (grunt) {

        'use strict';

        grunt.registerMultiTask('run_bower_license', 'Gather bower license report', function () {
            var options = this.options({
                    directory: 'bower_components',
                    output: 'bower-license.csv'
                }),
                entry, item, prop, done, dependency;

            done = this.async();

            console.log('Executing run_bower_license task');

            // If output file already exists, will delete it
            if(grunt.file.exists(options.output)) {
                console.log('Output file already exists. Will delete it');
                grunt.file.delete(options.output);
            }

            license.init(options, function (data) {
                for (entry in data) {
                    item = {
                        licenses: "",
                        repository: "",
                        homepage: ""
                    };

                    for (prop in data[entry]) {
                        if (prop === 'licenses') {
                            item.licenses = data[entry][prop];
                        } else if (prop === 'repository') {
                            item.repository = data[entry][prop];
                            if (item.repository.constructor === Object) {
                                item.repository = item.repository.url;
                            }
                        } else if (prop === 'homepage') {
                            item.homepage = data[entry][prop];
                        }
                    }

                    item.version = entry.substring(entry.indexOf('@') + 1, entry.length);
                    item.name = entry.substring(0, entry.indexOf('@'));

                    dependency = item.name + ',' + item.version + ',' + item.repository + ',' + item.licenses;

                    if(item.homepage) {
                        dependency += ',' + item.homepage;
                    }

                    fs.appendFileSync(options.output, dependency + '\r\n');
                }

                console.log('End of run_bower_license task');
                done();

            });

        });

    };




    此代码注册一个名为                        run_bower_license 的 Grunt 任务,该任务接受两个参数—一个表示                        Bower 组件存储在何处的目录,一个表示所生成的输出文件的名称。它删除输出文件(如果已存在)并调用                        bower-license 库,该库从 Bower                        读取所有客户端依赖项。
    对于返回的每个依赖项,run_bower_license                        尝试获得库的名称、版本、git 存储库                        URL、许可和主页。对于一个给定的库,可能并非所有这些信息都有,但所拥有的信息都会放在输出文件中。
  • 在 Gruntfile.js 文件中,注册一个调用 run_bower_license                    任务的新目标任务。将它命名为 client-side-license。
    1
    grunt.registerTask('client-side-license', ['run_bower_license:all']);




  • 从 Grunt 命令行运行 client-side-license 任务。
    1
    grunt client-side-license




    输出应该如下所示:
    1
    2
    3
    4
    5
    6
    Running "run_bower_license:all" (run_bower_license) task
    Executing run_bower_license task
    Output file already exists. Will delete it
    End of run_bower_license task

    Done, without errors.




  • 创建一个名为 get-licenses 的任务,该任务同时调用客户端和服务器端版本。
    1
    grunt.registerTask('client-side-license', ['run_bower_license:all']);




  • 执行所有这些更改后,您的 Gruntfile.js 文件应该类似于:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    module.exports = function (grunt) {

        grunt.initConfig({
            pkg: grunt.file.readJSON('package.json'),
            license_finder: {
                dev: {
                    options: {
                        production: false,
                        out: 'npm-dev-licenses.csv',
                        csv: true
                    }
                },
                prod: {
                    options: {
                        production: true,
                        out: 'npm-prod-licenses.csv',
                        csv: true
                    }
                }
            },
            run_bower_license: {
                all: {
                  options: {
                        directory: 'bower_components',
                        output: 'bower-license.csv'
                  }
                }
            }
        });

        grunt.task.loadTasks('build_tasks');
        grunt.loadNpmTasks('grunt-license-finder');

        grunt.registerTask('server-side-license', ['license_finder:dev', 'license_finder:prod']);
        grunt.registerTask('client-side-license', ['run_bower_license:all']);
        grunt.registerTask('get-licenses', ['server-side-license', 'client-side-license']);

    };




  • 从 Grunt 命令行运行 get-licenses 任务,获得客户端和服务器端报告。
    1
    grunt get-licenses




    输出应该如下所示:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Running "license_finder:dev" (license_finder) task
    Retrieved license information
    License information written to: npm-dev-licenses.csv

    Running "license_finder:prod" (license_finder) task
    Retrieved license information
    License information written to: npm-prod-licenses.csv

    Running "run_bower_license:all" (run_bower_license) task
    Executing run_bower_license task
    Output file already exists. Will delete it
    End of run_bower_license task

    Done, without errors.




返回列表