• <tfoot id='phzhi'></tfoot>
    <legend id='phzhi'><style id='phzhi'><dir id='phzhi'><q id='phzhi'></q></dir></style></legend>

      <bdo id='phzhi'></bdo><ul id='phzhi'></ul>
  • <small id='phzhi'></small><noframes id='phzhi'>

    1. <i id='phzhi'><tr id='phzhi'><dt id='phzhi'><q id='phzhi'><span id='phzhi'><b id='phzhi'><form id='phzhi'><ins id='phzhi'></ins><ul id='phzhi'></ul><sub id='phzhi'></sub></form><legend id='phzhi'></legend><bdo id='phzhi'><pre id='phzhi'><center id='phzhi'></center></pre></bdo></b><th id='phzhi'></th></span></q></dt></tr></i><div id='phzhi'><tfoot id='phzhi'></tfoot><dl id='phzhi'><fieldset id='phzhi'></fieldset></dl></div>
      1. 使用 Gulp 编译 JavaScript 并解决依赖关系(单独的文

        时间:2023-05-28

        1. <tfoot id='3KoUs'></tfoot>
            1. <i id='3KoUs'><tr id='3KoUs'><dt id='3KoUs'><q id='3KoUs'><span id='3KoUs'><b id='3KoUs'><form id='3KoUs'><ins id='3KoUs'></ins><ul id='3KoUs'></ul><sub id='3KoUs'></sub></form><legend id='3KoUs'></legend><bdo id='3KoUs'><pre id='3KoUs'><center id='3KoUs'></center></pre></bdo></b><th id='3KoUs'></th></span></q></dt></tr></i><div id='3KoUs'><tfoot id='3KoUs'></tfoot><dl id='3KoUs'><fieldset id='3KoUs'></fieldset></dl></div>
              • <bdo id='3KoUs'></bdo><ul id='3KoUs'></ul>

                  <legend id='3KoUs'><style id='3KoUs'><dir id='3KoUs'><q id='3KoUs'></q></dir></style></legend>
                    <tbody id='3KoUs'></tbody>

                  <small id='3KoUs'></small><noframes id='3KoUs'>

                  本文介绍了使用 Gulp 编译 JavaScript 并解决依赖关系(单独的文件)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  限时送ChatGPT账号..

                  我想用 Gulp 编译 JavaScript 文件.

                  I want to compile JavaScript files with Gulp.

                  我有一个 src 目录,其中所有脚本都带有 .js 扩展名.我希望将所有脚本单独编译并放置到与原始文件名相同的目标目录(dist)中.

                  I have a src directory where all scripts are present with .js extension. I want all scripts to be compiled separately and placed into a destination directory (dist) with the same filename as the original.

                  考虑这个例子:

                  src/jquery.js:

                  /**
                   * @require ../../vendor/jquery/dist/jquery.js
                   */
                  

                  src/application.js:

                  /**
                   * @require ../../vendor/angular/angular.js
                   * @require ../../vendor/ngprogress-lite/ngprogress-lite.js
                   * @require ../../vendor/restangular/dist/restangular.js
                   * @require ../../vendor/lodash/dist/lodash.underscore.js
                   * @require ../../vendor/angular-input-locker/dist/angular-input-locker.js
                   * @require ../../vendor/angular-route/angular-route.js
                   */
                  
                  (function(document, angular) {
                  
                      'use strict';
                  
                      var moduleName = 'waApp';
                  
                      angular.module(moduleName, [
                          // Some more code here.
                      ;
                  
                      // Bootstrapping application when DOM is ready.
                      angular.element(document).ready(function() {
                          angular.bootstrap(document, [moduleName]);
                      });
                  
                  })(document, angular);
                  

                  我正在使用 gulp-resolve-dependencies 来解决在每个源 JavaScript 文件的标头.

                  I'm using gulp-resolve-dependencies to resolve dependencies specified in the header of each source JavaScript file.

                  我的 gulpfile.js 看起来像这样:

                  My gulpfile.js is looking like this:

                  //==============//
                  // Dependencies //
                  //==============//
                  
                  var gulp = require('gulp');
                  var pathModule = require('path');
                  var resolveDependencies = require('gulp-resolve-dependencies');
                  var concat = require('gulp-concat');
                  var uglify = require('gulp-uglify');
                  
                  //=======//
                  // TASKS //
                  //=======//
                  
                  gulp.task('build:scripts', function(callback) {
                  
                      return gulp.src('scripts/*.js')
                          .pipe(resolveDependencies({
                              pattern: /* @require [s-]*(.*?.js)/g,
                              log: true
                          }))
                          .pipe(concat('all.js'))
                          .pipe(uglify())
                          .pipe(gulp.dest('js/'))
                      ;
                  });
                  

                  为了合并由 resolveDependencies 解析的脚本,我必须使用 concat,但 concat 需要一个文件名并且不仅合并原始文件和为它解析了依赖项,但所有 JavaScript 文件都是通过 glob 模式指定的.

                  In order to merge scripts resolved by resolveDependencies I have to use concat, but concat requires a filename and merges not only original file and dependencies resolved for it, but all JavaScript files specified via glob pattern.

                  那么,如何获取单个 JavaScript 文件作为输出? 像这样:

                  dist/jquery.js:
                      src/jquery.js
                      vendor/jquery.js
                  
                  dist/application.js:
                      src/application.js
                      vendor/angular.js
                      vendor/ngprogress-lite.js
                      ...
                  

                  我现在有这个解决方法:

                  I have this workaround for now:

                  gulp.task('build:scripts', function(callback) {
                  
                      var compileScript = function(stream, filename) {
                          return stream
                              .pipe(resolveDependencies({
                                  pattern: /* @require [s-]*(.*?.js)/g,
                                  log: true
                              }))
                              .pipe(concat(filename))
                              .pipe(uglify())
                              .pipe(gulp.dest('dist/'))
                          ;
                      };
                  
                      var scripts = getListOfFiles('src/', 'js');
                      for (key in scripts) {
                          var filename = scripts[key];
                          var stream = gulp.src(pathModule.join('src/', filename));
                          compileScript(stream, filename);
                      }
                  
                      callback(null);
                  });
                  
                  //===================//
                  // FUNCTIONS & UTILS //
                  //===================//
                  
                  /**
                   * Returns list of files in the specified directory
                   * with the specified extension.
                   *
                   * @param {string} path
                   * @param {string} extension
                   * @returns {string[]}
                   */
                  function getListOfFiles(path, extension) {
                  
                      var list = [];
                      var files = fs.readdirSync(path);
                      var pattern = new RegExp('.' + extension + '$');
                  
                      for (var key in files) {
                          var filename = files[key];
                          if (filename.match(pattern)) {
                              list.push(filename);
                          }
                      }
                  
                      return list;
                  }
                  

                  但它看起来很老套,我找不到一个很好的方法让它与 gulp-观看.

                  But it looks hackish and I can't find a good way to make it work with gulp-watch.

                  有没有更好更简单的方法来解决这个问题并达到预期的效果?

                  Is there a better and simpler way to solve this problem and achieve desired result?

                  推荐答案

                  如何获取单个 JavaScript 文件作为输出?

                  How do I get individual JavaScript files as the output?

                  在这里查看我对类似问题的回答:将随机值传递给 gulp 管道模板

                  Check an answer I gave to a similar problem here: Pass random value to gulp pipe template

                  使用这个 gulp 插件:https://github.com/adam-lynch/球形到乙烯基

                  Using this gulp plugin: https://github.com/adam-lynch/glob-to-vinyl

                  您可以访问单个文件.

                  这是怎么做的(假设使用这个插件):

                  This is how (assuming the use of this plugin):

                  function compileScript(file) {
                    gulp
                      .src('file')
                      .pipe(resolveDependencies({
                        pattern: /* @require [s-]*(.*?.js)/g,
                        log: true
                      }))
                      .pipe(concat())
                      .pipe(uglify())
                      .pipe(gulp.dest('dist/'))
                    ;
                  };
                  
                  gulp.task('build:scripts', function() {
                    globToVinyl('src/**/*.js', function(err, files){
                      for (var file in files) {
                        compileScript(files[file].path);
                      }
                    });
                  });
                  

                  这篇关于使用 Gulp 编译 JavaScript 并解决依赖关系(单独的文件)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:使用 gulp-usemin 不会在 html 文件中重写 uglified 文件 下一篇:在 Gulp Stream 中获取当前文件名

                  相关文章

                  最新文章

                • <i id='1qa6s'><tr id='1qa6s'><dt id='1qa6s'><q id='1qa6s'><span id='1qa6s'><b id='1qa6s'><form id='1qa6s'><ins id='1qa6s'></ins><ul id='1qa6s'></ul><sub id='1qa6s'></sub></form><legend id='1qa6s'></legend><bdo id='1qa6s'><pre id='1qa6s'><center id='1qa6s'></center></pre></bdo></b><th id='1qa6s'></th></span></q></dt></tr></i><div id='1qa6s'><tfoot id='1qa6s'></tfoot><dl id='1qa6s'><fieldset id='1qa6s'></fieldset></dl></div>
                  <tfoot id='1qa6s'></tfoot>

                  <small id='1qa6s'></small><noframes id='1qa6s'>

                    <legend id='1qa6s'><style id='1qa6s'><dir id='1qa6s'><q id='1qa6s'></q></dir></style></legend>

                    • <bdo id='1qa6s'></bdo><ul id='1qa6s'></ul>