usemin 不替换 <!--bower:js --> 块中的路径

usemin not replacing paths within <!--bower:js --> blocks

本文关键字:路径 js --bower 替换 usemin      更新时间:2023-09-26

我在理解usemin(Prepare)时遇到问题,描述如下: usemin

我的理解是,使用 usemin,您可以将许多文件合并为一个文件,这在构建 JS 应用程序时是个好主意。我也了解您应该如何使用它的流程,例如:

// simple build task
grunt.registerTask('build', [
  'useminPrepare',
  'concat:generated',
  'cssmin:generated',
  'uglify:generated',
  'filerev',
  'usemin'
]);

然后,如果您有此代码:

<!-- build:js js/app.js -->
<script src="js/app.js"></script>
<script src="js/controllers/thing-controller.js"></script>
<script src="js/models/thing-model.js"></script>
<script src="js/views/thing-view.js"></script>
<!-- endbuild -->

concat 任务会将所有这些文件合并为一个名为 app.js 的文件,并将其放在.tmp文件夹中。然后 uglify 任务将从 .tmp 文件夹中获取文件应用程序.js,丑化其中的所有 js,并将其放入 dist-folder。

假设在useminPrepare之前,我有另一个任务,它将原始html(index.html)也转换为dist文件夹。现在,当 usemin 任务启动时,我已将其设置为使用 dist 文件夹,并且它应该用对生成的 app.js 的引用替换旧块。所以现在,在 dist 文件夹内的 html 中,相同的部分应该看起来像这样:

<script src="js/app.js"></script>

这是对的吗?所以现在不应该留下任何评论标签了吗?现在我有一个与使用有关的问题。情况是这样的:在开始的html中,我在usemin标签中具有用于bower_components(bower-install)的评论标签,如下所示:

<!-- build:js js/app.js -->
<script src="js/app.js"></script>
<script src="js/controllers/thing-controller.js"></script>
<!-- bower:js -->
<script src="bower_components/something/some_bower_component.js"></script>
<script src="bower_components/something/some_bower_component.js"></script>
<script src="bower_components/something/some_bower_component.js"></script>
<!-- endbower -->
<script src="js/models/thing-model.js"></script>
<script src="js/views/thing-view.js"></script>
<!-- endbuild -->

使用此设置,一切似乎都很好,直到最后的usemin任务。usemin 任务现在无法替换代码块。我已经确定了它不能的原因。这是因为我在那里有那些鲍尔评论块。因此,如果我单独执行第一个任务,然后将代码传输到 dist,然后删除那些 bower 注释标签,并在构建中创建其余标签,那么一切正常。我想解决这个问题,以便我可以直接运行所有任务。我该如何解决这个问题?为什么 usemin 如果看到注释块会失败?我可以更改 usemin 选项以忽略评论块吗?或者我应该写一个咕噜咕噜的任务,在注入 bower 组件并将 html 转移到 dist 后删除那些特定的注释块?我拥有的版本是:

"grunt-bower-install": "~0.7.0",
"grunt-concurrent": "~0.4.1",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-coffee": "~0.7.0",
"grunt-contrib-compass": "~0.6.0",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-connect": "~0.5.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-cssmin": "~0.7.0",
"grunt-contrib-htmlmin": "~0.1.3",
"grunt-contrib-uglify": "~0.2.0",
"grunt-usemin": "~2.0.0",

看到这个答案:grunt usemin 不会影响 html 文件(index.html)

我自己刚刚遇到了这个问题,我的解决方法是将所有行尾转换为 unix 样式的行尾 (lf),并避免在由 grunt usemin 转换的任何文件中出现 Windows 行尾