首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grunt和js autoloader

grunt和js autoloader
EN

Stack Overflow用户
提问于 2015-11-14 16:09:38
回答 1查看 156关注 0票数 0

我试过几件事,但找不到一个好的解决办法。我正在使用grunt编译我的sass并缩小我的javascript。

是否可以在特定目录中自动加载每个.sass文件和每个.js文件?

我试过这样的东西

代码语言:javascript
复制
sass: {
            options: {
                sourceMap: false
            },
            dist: {
                src: 'src/sass/**/*.sass',
                dest: 'dist/css/style.css'
            }
        }

但是这只会加载第一个sass文件。我也不知道得有什么效果,但我也试过了,也没有找到我想要的解决方案。

基本上,sass/文件夹中的所有文件都应该编译成一个大的style.css文件,与javascript相同。

当然,我可以在一个main.sass文件中手动导入每个文件,但是我希望使用一个autoload函数,这样我就不会懒惰,也不会创建新文件,因为我必须添加它们。

编辑:

所以有了这个

代码语言:javascript
复制
files: [{
                    expand: true,
                    cwd: "src/sass/",
                    src: ["**/*.sass"],
                    dest: "dest/css",
                    ext: ".css"
                }]

我真的可以做我想做的事。问题是我的混音器加载得太晚了,这是个错误,因为它找不到我想要包含的混音。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-14 17:19:59

这是从多个源文件生成单个输出文件的格式:

代码语言:javascript
复制
concat: {
    whatever: {
        options: { separator: '\n' },
        src: ['src/sass/**/*.sass'],
        dest: 'build/tmp.sass'   // make sure the temporary build/ dir exists!
    }
}

它只适用于支持组合多个文件的任务;在本例中是grunt-contrib-concat任务。它生成dist/css/sass.tmp,您需要用sass任务处理它:

代码语言:javascript
复制
sass: {
    dist: {
        files: [{        
            src: 'build/tmp.sass',
            dest: 'dist/css/style.css'
        }]
    }
}

您将确保它们按照如下所示的顺序运行:

代码语言:javascript
复制
grunt.registerTask( 'default', ['concat', 'sass'] ); // add your uglify/cssmin here

但是,我不建议这样做,因为sass文件的顺序是不可控制的,而且它也不能使mixin的可用,即使它们首先被编译成css --这是没有意义的,因为它们失去了它们的“mixin”格式。最好在单个源文件上运行sass并导入该源文件中的其他文件。

更新

关于混合文件的自动加载,SASS参考确实提到您可以使用处理@import的自定义导入器(用Ruby编写);我不确定这是只用于顶级文件导入,还是用于规则中的@import mixin-name(foo),但我不这么认为。

假设您有一个主sass文件,可以基于concat使用另一种方法。您需要向它添加一个@import 'all-mixins'。这个all-mixins.sass是一个生成的文件:

代码语言:javascript
复制
concat: {
    all_mixins: {
        options: { separator: '\n' },
        src: ['src/sass/mixins/*.sass'],
        dest: 'build/all-mixins.sass'
    }
}

并指定要将loadPath添加到路径中的build/

代码语言:javascript
复制
sass: {
    dist: {
        options: {
            loadPath: 'build/'
        },
        files: [{        
            src: 'build/tmp.sass',
            dest: 'dist/css/style.css'
        }]
    }
}

这是尽可能接近自动加载,而不扩展sass本身。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33710418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档