【问题标题】:usemin using wrong directory for input asset filesusemin 为输入资产文件使用错误的目录
【发布时间】:2014-11-23 23:28:06
【问题描述】:

我正在尝试让 gruntfile 在 Laravel 应用程序中连接/丑化 javascript 文件。我的所有任务都是独立工作的,但无论出于何种原因,我的输入 javascript 文件的路径都没有正确设置。

这是我的刀片模板之一的示例:

@section('scripts')
<!-- build:js /js/min/page.min.js -->
<script type="text/javascript" src="/js/scrollIt.min.js"></script>
<script type="text/javascript" src="/js/jquery.omniwindow.js"></script> 
<script type="text/javascript" src="/js/isotope.min.js"></script>
<!-- endbuild -->
@stop

这是我的 useminPrepare / usemin 任务定义:

useminPrepare: {
    html: 'app/views/**/*.blade.php',
    options: {
        dest: 'app/views/dist'
    }
},
usemin: {
    options: {
        assetDirs: [ 'public/js' ]
    },
    html: [ 'app/views/dist/**/*.blade.php' ]
},

我没有定义 uglify 任务,我只是依赖 usemin 将生成的任务。

所有模板都正确地进入了“app/views/dist”目录,并进行了正确的替换(在上面的示例中,模板中包含一个位于public/js/min/page.min.js 的javascript 文件)。在处理过程中,我注意到输出:

$ grunt build
Running "useminPrepare:html" (useminPrepare) task
Going through {list of templates} to update the config
Looking for build script HTML comment blocks

Configuration is now:

  concat:
  { generated: 
   { files: 
      [ { dest: '.tmp/concat/js/min/page.min.js',
          src: 
           [ 'app/views/course/js/scrollIt.min.js',
             'app/views/course/js/jquery.omniwindow.js',
             'app/views/course/js/isotope.min.js' ] },
        ] } }

  uglify:
  { generated: 
   { files: 
      [ { dest: 'app/views/dist/js/min/page.min.js',
          src: [ '.tmp/concat/js/min/page.min.js' ] },
        ] } }

  cssmin:
  {}

正如您在上面看到的,它正在app/views/course/js 目录中查找我的 javascript 文件,这是不正确的。为什么是这样?我认为在我的 usemin 任务中指定 assetDirs: ['public/js'] 会告诉 grunt 在哪里可以找到这些文件。我尝试将脚本引用更改为如下所示:

<script type="text/javascript" src="../../../public/js/scrollIt.min.js"></script>

这会导致构建成功,但会破坏我的本地开发,因此它绝对不是解决方案。我是否需要以某种方式覆盖uglify:generated 任务,如果需要,我该如何为具有生成文件名的多个不同模板执行此操作?

如果有必要,您可以查看我的整个 Gruntfile.js here。你可以从那里看到我还必须添加一个新的copy 任务,用于将 Javascript 文件从app/views/dist/js/min 复制回public/js/min。我也想摆脱它,但如果我能解决这个问题,我会很高兴。

【问题讨论】:

    标签: javascript laravel gruntjs blade grunt-usemin


    【解决方案1】:

    这里的答案其实还是比较简单的,可以直接从usemin documentation收集到(刚开始仔细看):

    块表示为:

    <!-- build:<type>(alternate search path) <path> -->
    ... HTML Markup, list of script / link tags.
    <!-- endbuild -->
    

    在我使用 Laravel 的情况下,我需要指定 public/ 的备用搜索路径,结果它工作得很好:

    @section('scripts')
    <!-- build:js(public/) /js/min/script.min.js -->
    <script type="text/javascript" src="/js/script1.js"></script> 
    <script type="text/javascript" src="/js/script2.js"></script>
    <script type="text/javascript" src="/js/script3.js"></script>
    <script type="text/javascript" src="/js/script4.js"></script>
    <!-- endbuid -->
    @stop
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2013-12-27
      • 2011-11-04
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多