我有两个文件:
1 - common。style (该文件具有将在我的项目的所有页面上使用的导入)
@import 'utils/variables.styl'
@import 'utils/fonts.styl'
@import 'utils/mixin.styl'
2 - home。style (此文件仅用于我的项目的主页部分,并取决于common. style)
body
font-family CoolDown
.box
background $commonBg
在我的gulpfile中,我创建了两个任务,一个用于编译common。样式和另一个来编译我的项目的所有页面。
共同任务:gulp.task('commonCSS', function () {
return gulp.src('src/styles/common.styl')
.pipe($.plumber())
.pipe($.stylus({
'include css': true,
use: [jeet(), nib(), rupture()],
import: ['jeet', 'nib', 'rupture']
}))
.pipe($.autoprefixer(stylBrowsers))
.pipe(gulp.dest(paths.build + 'css'))
.pipe(reload({ stream: true }));
});
我的问题是页面任务,这只工作,如果我把共同的。样式文件中的SRC路径,并连接它们。但要这样做,我需要在文件中添加一个名称。我想使用当前正在编译的。style的名称。
gulp.task('pagesCSS', ['commonCSS'], function () {
return gulp.src(['src/styles/common.styl', 'src/styles/pages/**/*.styl'])
.pipe($.plumber())
.pipe($.concat('**page.css**')
.pipe($.stylus({
'include css': true,
use: [ jeet(), nib(), rupture() ],
import: ['jeet', 'nib', 'rupture']
}))
.pipe($.autoprefixer(stylBrowsers))
.pipe($.minifyCss())
.pipe(gulp.dest(paths.build + 'css'))
.pipe(reload({ stream: true }));
});
问题是:有一种方法可以包含共性。pagesCSS任务使用的样式?
可能我遗漏了什么或者使用了错误的解决方案。
你不能只是@import
或@require
普通。那些文件里的风格?@import "../../common"
和Stylus将为每页包含它们,不需要concat
。
或…
你可以使用import
选项,你已经在你的配置对象。Stylus将在每个文件的开头单独包含common.styl
。
首先添加paths: ['node_modules', 'src/styles']
。这样,Stylus就知道如何解析导入的路径。如果你提供完整的路径,你可以跳过这一步。
现在你可以添加你的common.styl
到import: ['jeet', 'nib', 'rupture', 'common']
。
我对变量使用这种配置,所以我不必在每个文件中包含它们。
完整的例子应该是这样的:
gulp.task('pagesCSS', ['commonCSS'], function () {
return gulp.src('src/styles/pages/**/*.styl') // <-- only pages styles are piped
.pipe($.plumber())
// .pipe($.concat('**page.css**') // <-- remove this line
.pipe($.stylus({
'include css': true,
use: [ jeet(), nib(), rupture() ],
paths: ['node_modules', 'src/styles'] // <-- resolve your styles path
import: ['jeet', 'nib', 'rupture', 'common'] // <-- add your shared file
}))
.pipe($.autoprefixer(stylBrowsers))
.pipe($.minifyCss())
.pipe(gulp.dest(paths.build + 'css'))
.pipe(reload({ stream: true }));
});