rat*_*kin 6 javascript css minify gruntjs
我几个小时都在努力设置适当的缩小,实际上重写了网址.我已经使用了useref和usemin,他们可以很好地扫描html,聚合所有JS和CSS并输出到一个文件中.但是,对于我的生活,我不能让url重写正常工作.我的结构很简单:
\root
index.html
application.css // minified
application.js // minified
\vendor
\bootstrap
\fonts // font files here
bootstrap.css // pre-minified
Run Code Online (Sandbox Code Playgroud)
bootstrap.css通过使用相对url引用字体文件 - font/bootstrap_font.ttf
当bootstrap被缩小时,它作为应用程序css的一部分登陆,现在在我的root中,因此路径将从root指向/font/bootstrap_font.ttf.原始目录层次结构保持不变,所以我基本上希望将此url重写为/vendor/bootstrap/font/bootstrap_font.ttf
哦,为什么cssmin任务不接受多个文件?
更新 这是我当前的grunt文件:
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
useminPrepare: {
html: 'web/public/index.html',
options: {
dest: 'web/public-dist'
}
},
usemin: {
html: 'web/public-dist/index.html',
},
copy: {
all: {
files: [{
expand: true,
cwd: 'web/public/',
src: ['**'],
dest: 'web/public-dist/'
}]
},
resources: {
files: [{
expand: true,
cwd: 'web/public/',
src: ['**/*.*', '!**/*.js', '!**/*.css', '!**/*.txt'],
dest: 'web/public-dist/'
}]
}
},
uglify: {
options: {
mangle: true,
sourceMap: false,
compress: true,
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
standard: {
files: [{
expand: true,
cwd: 'web/public-dist/',
src: ['**/*.js'],
dest: 'web/public-dist/'
}]
}
},
cssmin: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
},
standard: {
files: [{
expand: true,
cwd: 'web/public-dist/',
src: ['**/*.css'],
dest: 'web/public-dist/'
}]
},
}
});
grunt.registerTask('package', [ 'copy:resources', 'useminPrepare', 'concat:generated','cssmin:generated', 'uglify:generated', 'usemin']);
};
Run Code Online (Sandbox Code Playgroud)
在这种形式中,cssmin甚至不能用作单独调用的目标,因为显然它的配置是错误的 - 它抱怨它不能接受许多文件.我在这做错了什么?
从我收集到的点点滴滴中,显然改变usemin流并且不允许它在以后连接所有css和cssmin是至关重要的 - 因为这样,它显然会丢失关于每个css文件的目录原点的重要信息.我已经尝试更改流程,但由于相同的cssmin错误它不起作用 - 无法接受许多文件.
好吧,当我开始用 grunt 构建我的 css 和 js 时,我肯定遇到了同样的问题。这是我对“相对网址”问题的解决方案。请注意,这篇文章并不是回答您的实际问题,而是提供另一种解决问题的方法。我有更多的嵌套文件夹结构,但它对我来说效果很好,希望它对您有所帮助。
要点是将所有 css/js 构建到另一个文件夹,并将资产文件相对于这个新文件夹复制。让我们为其命名“构建”:
\root
\build
application.css - minified
application.js - minified
\fonts
...
\img
...
...
index.html
\ ...
Run Code Online (Sandbox Code Playgroud)
使用grunt-contrib-copy插件将所有资产复制到 /build/assets 目录,而不破坏其原始结构。所以你的 css 保存的相对路径,字体仍然在 ./fonts/ 文件夹中。
使用这种方法时您将面临的问题是保存资产的文件夹结构。好吧,这个问题可以通过在 grunt 文件中详细化构建配置来解决。现在你不能说“好吧,将所有 /**/*.css 文件构建到 application.css”,而必须针对不同的文件结构选项描述不同的情况。如果您的项目具有明显且符合逻辑的文件结构,那么添加它们并不复杂。
我使用的规则是每个 css 文件都必须有 asset 目录作为它的同级文件。所以 gruntfile 仅扩展了几行,构建结构看起来像这样
\root
\build
\css
\assets
\fonts
\img
application.css - minified //all relative passes saved
\foo
\bar
\biz
\assets
\fonts
first.css
\row
\assets
\img
second.css
index.html
Run Code Online (Sandbox Code Playgroud)
显然,您必须有资产名称命名规则以防止覆盖文件。
希望这对你有帮助
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |