0

我正在尝试在 Lumen(一个 php 框架)内安装 Foundation for Apps。

我很难弄清楚如何在我的 gulpfile 中配置前端路由器以创建正确的 route.js 文件。

  1. 在 localhost 上公开的文件位于 /public/index.php (加载正常)
  2. 它可以很好地加载 app.css、foundation.js、templates.js、routes.js 和 app.js,它们都位于 public/build/assets(我相应地更改了 gulpfile)。

  3. 但是,routes.js 文件显示:

    [{"name":"home","url":"/","path":"client/templates/home.html"}];

代替:

[{"name":"home","url":"/","path":"build/templates/home.html"}];

我该如何解决?

我的 gulpfile 是:

// FOUNDATION FOR APPS TEMPLATE GULPFILE
// -------------------------------------
// This file processes all of the assets in the "client" folder, combines them with the Foundation for Apps assets, and outputs the finished files in the "build" folder as a finished app.

// 1. LIBRARIES
// - - - - - - - - - - - - - - -

var $        = require('gulp-load-plugins')();
var argv     = require('yargs').argv;
var gulp     = require('gulp');
var rimraf   = require('rimraf');
var router   = require('front-router');
var sequence = require('run-sequence');

// Check for --production flag
var isProduction = !!(argv.production);

// 2. FILE PATHS
// - - - - - - - - - - - - - - -

var paths = {
  assets: [
    './client/**/*.*',
    '!./client/templates/**/*.*',
    '!./client/assets/{scss,js}/**/*.*'
  ],
  // Sass will check these folders for files when you use @import.
  sass: [
    'client/assets/scss',
    'bower_components/foundation-apps/scss'
  ],
  // These files include Foundation for Apps and its dependencies
  foundationJS: [
    'bower_components/fastclick/lib/fastclick.js',
    'bower_components/viewport-units-buggyfill/viewport-units-buggyfill.js',
    'bower_components/tether/tether.js',
    'bower_components/hammerjs/hammer.js',
    'bower_components/angular/angular.js',
    'bower_components/angular-animate/angular-animate.js',
    'bower_components/angular-ui-router/release/angular-ui-router.js',
    'bower_components/foundation-apps/js/vendor/**/*.js',
    'bower_components/foundation-apps/js/angular/**/*.js',
    '!bower_components/foundation-apps/js/angular/app.js'
  ],
  // These files are for your app's JavaScript
  appJS: [
    'client/assets/js/app.js'
  ]
};

// 3. TASKS
// - - - - - - - - - - - - - - -

// Cleans the build directory
gulp.task('clean', function(cb) {
  rimraf('../public/build', cb);
});

// Copies everything in the client folder except templates, Sass, and JS
gulp.task('copy', function() {
  return gulp.src(paths.assets, {
    base: './client/'
  })
    .pipe(gulp.dest('../public/build'))
  ;
});

// Copies your app's page templates and generates URLs for them
gulp.task('copy:templates', function() {
  return gulp.src('./client/templates/**/*.html')
    .pipe(router({
      path: '../public/build/assets/js/routes.js',
      root: './client/templates'
    }))
    .pipe(gulp.dest('../public/build/templates'))
  ;
});

// Compiles the Foundation for Apps directive partials into a single JavaScript file
gulp.task('copy:foundation', function(cb) {
  gulp.src('bower_components/foundation-apps/js/angular/components/**/*.html')
    .pipe($.ngHtml2js({
      prefix: 'components/',
      moduleName: 'foundation',
      declareModule: false
    }))
    .pipe($.uglify())
    .pipe($.concat('templates.js'))
    .pipe(gulp.dest('../public/build/assets/js'))
  ;

  // Iconic SVG icons
  gulp.src('./bower_components/foundation-apps/iconic/**/*')
    .pipe(gulp.dest('../public/build/assets/img/iconic/'))
  ;

  cb();
});

// Compiles Sass
gulp.task('sass', function () {
  return gulp.src('client/assets/scss/app.scss')
    .pipe($.sass({
      includePaths: paths.sass,
      outputStyle: (isProduction ? 'compressed' : 'nested'),
      errLogToConsole: true
    }))
    .pipe($.autoprefixer({
      browsers: ['last 2 versions', 'ie 10']
    }))
    .pipe(gulp.dest('../public/build/assets/css/'))
  ;
});

// Compiles and copies the Foundation for Apps JavaScript, as well as your app's custom JS
gulp.task('uglify', ['uglify:foundation', 'uglify:app']);

gulp.task('uglify:foundation', function(cb) {
  var uglify = $.if(isProduction, $.uglify()
    .on('error', function (e) {
      console.log(e);
    }));

  return gulp.src(paths.foundationJS)
    .pipe(uglify)
    .pipe($.concat('foundation.js'))
    .pipe(gulp.dest('../public/build/assets/js/'))
  ;
});

gulp.task('uglify:app', function() {
  var uglify = $.if(isProduction, $.uglify()
    .on('error', function (e) {
      console.log(e);
    }));

  return gulp.src(paths.appJS)
    .pipe(uglify)
    .pipe($.concat('app.js'))
    .pipe(gulp.dest('../public/build/assets/js/'))
  ;
});

// RR: took this out; going to use php artisan serve
// Starts a test server, which you can view at http://localhost:8080
// gulp.task('server', ['build'], function() {
//   gulp.src('./build')
//     .pipe($.webserver({
//       port: 8080,
//       host: 'localhost',
//       fallback: 'index.html',
//       livereload: true,
//       open: true
//     }))
//   ;
// });

// Builds your entire app once, without starting a server
gulp.task('build', function(cb) {
  sequence('clean', ['copy', 'copy:foundation', 'sass', 'uglify'], 'copy:templates', cb);
});

// RR: changed to not run server
// Default task: builds your app, starts a server, and recompiles assets when they change
// gulp.task('default', ['server'], function () {
gulp.task('default', ['build'], function () {
  // Watch Sass
  gulp.watch(['./client/assets/scss/**/*', './scss/**/*'], ['sass']);

  // Watch JavaScript
  gulp.watch(['./client/assets/js/**/*', './js/**/*'], ['uglify:app']);

  // Watch static files
  gulp.watch(['./client/**/*.*', '!./client/templates/**/*.*', '!./client/assets/{scss,js}/**/*.*'], ['copy']);

  // Watch app templates
  gulp.watch(['./client/templates/**/*.html'], ['copy:templates']);
});
4

2 回答 2

0

这是最终的工作 gulpfile,以防其他人需要它。我敢肯定有更好的方法来完成这一切,但是,嘿,——它有效!

gulpfile 位于项目名称/ffa/

php artisan serve 在端口 8000 上运行服务器并响应 livereload。

工作的前端目录位于 project-name/ffa/client/

构建进入项目名称/公共/构建/

    // 应用程序模板 GULPFILE 的基础
    // -------------------------------------
    // 此文件处理“client”文件夹中的所有资产,将它们与 Foundation for Apps 资产组合,并将“build”文件夹中的完成文件作为完成的应用程序输出。

    // 1. 库
    // - - - - - - - - - - - - - - -

    var $ = require('gulp-load-plugins')();
    var argv = require('yargs').argv;
    var gulp = require('gulp');
    var rimraf = 要求('rimraf');
    var router = require('front-router');
    var sequence = require('run-sequence');
    var replace = require('gulp-replace');
    var livereload = require('gulp-livereload');

    // 检查 --production 标志
    var isProduction = !!(argv.production);

    // 2. 文件路径
    // - - - - - - - - - - - - - - -

    变量路径 = {
      资产:[
        '。/客户/**/*。*',
        '!./client/templates/**/*.*',
        '!./client/assets/{scss,js}/**/*.*'
      ],
      // 当你使用@import 时,Sass 会检查这些文件夹中的文件。
      萨斯:[
        '客户/资产/scss',
        'bower_components/基础应用程序/scss'
      ],
      // 这些文件包括 Foundation for Apps 及其依赖项
      基础JS:[
        'bower_components/fastclick/lib/fastclick.js',
        'bower_components/viewport-units-buggyfill/viewport-units-buggyfill.js',
        'bower_components/tether/tether.js',
        'bower_components/hammerjs/hammer.js',
        'bower_components/angular/angular.js',
        'bower_components/angular-animate/angular-animate.js',
        'bower_components/angular-ui-router/release/angular-ui-router.js',
        'bower_components/foundation-apps/js/vendor/**/*.js',
        'bower_components/foundation-apps/js/angular/**/*.js',
        '!bower_components/foundation-apps/js/angular/app.js'
      ],
      // 这些文件用于您应用的 JavaScript
      应用程序:[
        '客户端/资产/js/app.js'
      ]
    };

    // 3. 任务
    // - - - - - - - - - - - - - - -

    // 清理构建目录
    gulp.task('干净',函数(cb){
      rimraf('../public/build', cb);
    });

    // 复制客户端文件夹中除模板、Sass 和 JS 之外的所有内容
    gulp.task('复制', function() {
      返回 gulp.src(paths.assets, {
        基础:'./client/'
      })
        .pipe(gulp.dest('../public/build'))
      ;
    });

    // 复制您应用的页面模板并为其生成 URL
    gulp.task('copy:templates', function() {
      返回 gulp.src('./client/templates/**/*.html')
        .pipe(路由器({
          路径:'../public/build/assets/js/routes.js',
          根:'客户'
        }))
        .pipe(gulp.dest('../public/build/templates'))
      ;
    });

    // RR: 将 routes.js 中的路径更改为 build/templates/
    gulp.task('更新路由', function(){
      gulp.src(['../public/build/assets/js/routes.js'])
        .pipe(replace('templates', 'build/templates'))
        .pipe(gulp.dest('../public/build/assets/js/'));
    });


    // 将 Foundation for Apps 指令部分编译成单个 JavaScript 文件
    gulp.task('copy:foundation', function(cb) {
      gulp.src('bower_components/foundation-apps/js/angular/components/**/*.html')
        .pipe($.ngHtml2js({
          前缀:'组件/',
          模块名称:'基础',
          声明模块:假
        }))
        .pipe($.uglify())
        .pipe($.concat('templates.js'))
        .pipe(gulp.dest('../public/build/assets/js'))
      ;

      // 标志性的 SVG 图标
      gulp.src('./bower_components/foundation-apps/iconic/**/*')
        .pipe(gulp.dest('../public/build/assets/img/iconic/'))
      ;

      CB();
    });

    // 编译 Sass
    gulp.task('sass', function () {
      return gulp.src('client/assets/scss/app.scss')
        .pipe($.sass({
          包括路径:paths.sass,
          outputStyle: (isProduction ? 'compressed' : 'nested'),
          errLogToConsole: 真
        }))
        .pipe($.autoprefixer({
          browsers: ['last 2 versions', 'ie 10']
        }))
        .pipe(gulp.dest('../public/build/assets/css/'))
      ;
    });

    // 编译并复制 Foundation for Apps JavaScript,以及您应用的自定义 JS
    gulp.task('uglify', ['uglify:foundation', 'uglify:app']);

    gulp.task('uglify:foundation', function(cb) {
      var uglify = $.if(isProduction, $.uglify()
        .on('错误', 函数 (e) {
          控制台.log(e);
        }));

      返回 gulp.src(paths.foundationJS)
        .pipe(丑化)
        .pipe($.concat('foundation.js'))
        .pipe(gulp.dest('../public/build/assets/js/'))
      ;
    });

    gulp.task('uglify:app', function() {
      var uglify = $.if(isProduction, $.uglify()
        .on('错误', 函数 (e) {
          控制台.log(e);
        }));

      返回 gulp.src(paths.appJS)
        .pipe(丑化)
        .pipe($.concat('app.js'))
        .pipe(gulp.dest('../public/build/assets/js/'))
      ;
    });


    // 一次构建整个应用程序,无需启动服务器
    gulp.task('build', function(cb) {
      sequence('clean', ['copy', 'copy:foundation', 'sass', 'uglify'], 'copy:templates', 'update-route', cb);
    });

    // 默认任务:构建您的应用程序,并在资产更改时重新编译它们
    gulp.task('default', ['build'], function () {

      livereload.listen(35729);

      // 观察萨斯
      gulp.watch(['./client/assets/scss/**/*', './scss/**/*'], ['build']);

      // 观看 JavaScript
      gulp.watch(['./client/assets/js/**/*', './js/**/*'], ['build']);

      // 查看静态文件
      gulp.watch(['./client/**/*.*', '!./client/templates/**/*.*', '!./client/assets/{scss,js}/** /*。*'], ['建造']);

      // 观看应用模板
      gulp.watch(['./client/templates/**/*.html'], ['build']);

      gulp.on('停止',函数(){
        livereload.changed("");
      });

    });
于 2015-04-25T03:37:36.727 回答
0

我找到了解决方法:

  1. 安装 gulp-replace

    npm install --save-dev gulp-replace
  2. 为它创建一个变量:

    var replace = require('gulp-replace');
  3. 创建一个任务。

    // RR: 将 routes.js 中的路径更改为 build/templates/
    gulp.task('更新路由', function(){
      gulp.src(['../public/build/assets/js/routes.js'])
        .pipe(replace('templates', 'build/templates'))
        .pipe(gulp.dest('../public/build/assets/js/'));
    });
  4. 添加到构建任务

    gulp.task('build', function(cb) {
      sequence('clean', ['copy', 'copy:foundation', 'sass', 'uglify'], 'copy:templates', 'update-route', cb);
    });
于 2015-04-25T01:58:52.667 回答