javascript - Maven/JavaScript 项目

标签 javascript java angularjs maven

目前我正在开发一个 JavaScript 应用程序,并尝试尽可能模块化地构建它。我打算做的是获得像这样的文件夹结构

js
|__ controllers
|__ services
|__ directives
index.html

我正在使用 angularjs,我想将所有 Controller 和服务拆分为单独的文件。

我是一名Java开发人员,我想使用maven来构建这个项目并将其部署在tomcat上。

在生产模式下,我想要一个压缩器/混淆器将所有文件打包到一个 application.js 中。通常,当我构建项目时,我只有一个用于所有 Controller 的文件和一个用于所有服务的文件,依此类推。所以我正在做的是为 dev 创建一个配置文件,为 live 创建一个配置文件,并通过过滤将 .min.js 添加到我的 index.html 中包含所有文件(实时最小化,开发时非最小化)

最后我的问题:

处理多个文件的最佳方法是什么?

在开发模式下我想要

<script type="text/javascript" src="MyFirstController.js">
<script type="text/javascript" src="MySecondController.js">
<script type="text/javascript" src="MyThirdController.js">
<script type="text/javascript" src="MyFirstService.js">
/* ... */

在生产模式下,我只希望我的 index.html 中包含一个文件

<script type="text/javascript" src="myapp.js">

第一个解决方案,但显然不是一个非常漂亮的解决方案,是在我的 Maven 文件中有一个多行属性,我在其中获取所有脚本标签,然后用过滤替换它们。

我希望有人能告诉我一个好的解决方案来解决我的问题。提前致谢!

最佳答案

看看frontend-maven-plugin 。如果您想将脚本与 Maven Artifact 捆绑在一起,这非常有用。

我不需要使用这个,因为我的 javascript 代码是完全独立的可部署的(解耦等等)。所以这是 gulp 的一个很好的用例。查看 hottowel 中的 gulpfile.js .

首先看一下构建任务及其依赖项:

/**
 * Build everything
 * This is separate so we can run tests on
 * optimize before handling image or fonts
 */
gulp.task('build', ['optimize', 'images', 'fonts', 'test-server'], function() {
    log('Building everything');

    var msg = {
        title: 'gulp build',
        subtitle: 'Deployed to the build folder',
        message: 'Running `gulp serve-build`'
    };
    del(config.temp);
    log(msg);
    notify(msg);
});

这些应该可以完成您想要的大部分操作。还有特定于环境的 gulp 任务:

gulp serve-dev
gulp build

里面还有很多内容,请仔细阅读。

我还参与过 java + Angular 项目,它的部署非常方便,并且与 java/maven 方法一致,可以为 javascript 代码创建 Artifact ,这些 Artifact 可以存储在 nexus 上,并在需要时获取以进行部署。

JavaScript 代码的 Artifact 只是一个 zip 文件,我使用以下 gulp 任务创建该文件(忽略目录名称前面带有 ! 的目录和文件):

/**
 * Create a versioned artefact
 */

    gulp.task('generate-artifact', function() {
        var filename = getFilename();
        return gulp
            .src([
                './**/*.*',
                '!artifacts/',
                '!artifacts/**',
                '!build/',
                '!build/**',
                '!node_modules/',
                '!node_modules/**',
                '!bower_components/',
                '!bower_components/**'
                ])
            .pipe($.tar(filename + '.tar'))
            .pipe($.gzip())
            .pipe(gulp.dest('./artifacts/'));
    });

然后使用nexus-deployer部署到nexus插件:

/**
 * Deploy release to nexus
 */ 
gulp.task('deploy-release', ['clean-pomdir'], function(cb) {
    var deployer = require('nexus-deployer');
    var filename = getFilename();
    var pkg = require('./package.json');

    log('Retrieving artifact ' + filename + '.tar.gz' + 'from artifacts dir');
    log('Deploying version ' + pkg.version + ' of ' + pkg.name);

    var release = {
        groupId: 'my.group.id',
        artifactId: 'my-artefact',
        version: pkg.version,
        packaging: 'tar.gz',
        auth: {
            username: args.username,
            password: args.password
        },
        pomDir: config.pomDirReleases,
        url: 'http://path-to-nexus.repo',
        artifact: './artifacts/' + filename + '.tar.gz',
        noproxy: '',
        cwd: ''
    };

    deployer.deploy(release, cb);
});

里面还有一些自定义方法和配置:伟大的 yargs模块将用户名和密码作为命令行参数传递; gulpfile.js 中获取文件名的便捷方法:

function getFilename() {
    var pkg = require('./package.json');
    var filename = pkg.name + '_' + pkg.version;
    return filename;
}

关于javascript - Maven/JavaScript 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34452889/

相关文章:

java - 删除字符串中的最后一个输入,使其不会显示在 showMessageDialog 中

javascript - 获取框而不是水平线

javascript - 如何在angularjs中重定向

javascript - 试图重写 playAudio 但不起作用

javascript - 显示表格根据动态选项的选择变化进行显示

java - 在Java中连接2个字符串的方法

java - 简单的 map 投影

javascript - Chrome 扩展程序 : Insert text into textfield when clicking button in pop-up

javascript - 通过更改 select 的 selectedIndex 来触发更改事件,无需使用 jQuery

javascript - 插入数组不会更新 View