Получить SASS для автокомпиляции с NodeJS Express и node-sass
Я разрабатываю с помощью node.js, и вместо написания css хотел бы написать SCSS-файлы, которые автоматически компилируются при каждом обновлении страницы.
Как я могу получить файлы SASS для автокомпиляции при использовании NodeJS, Express и node-sass.
2 ответов
Update (7 Dec 2014)
промежуточное ПО connect от узел-sass была выделена в узел-sass-промежуточное ПО см. ответ
установить узел-sass
в папке проекта запустите:
$ npm install node-sass
изменить приложение.js
предполагая, что вы создали свое приложение с помощью
$ express my_app
код app.js
должно выглядеть это:
var express = require('express'),
routes = require('./routes');
var app = module.exports = express.createServer();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
....
вот модификации:
var express = require('express'),
routes = require('./routes'),
sass = require('node-sass'), // We're adding the node-sass module
path = require('path'); // Also loading the path module
var app = module.exports = express.createServer();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
// notice that the following line has been removed
// app.use(express.static(__dirname + '/public'));
// adding the sass middleware
app.use(
sass.middleware({
src: __dirname + '/sass',
dest: __dirname + '/public',
debug: true,
})
);
// The static middleware must come after the sass middleware
app.use(express.static( path.join( __dirname, 'public' ) ) );
});
важно отметить, что
app.use( sass.middleware ... );
прежде
app.use( express.static ... )
причина в том, что мы сначала хотим, чтобы sass скомпилировать любые файлы sass, которые изменились, только затем обслуживать их (что делается express.static
).
перезагрузить приложение
вам придется перезапустить приложение, чтобы эти изменения произошли.
включить его где-то так он компилирует
теперь мы можем включить app.scss
в нашем . Но он пока не компилируется. Промежуточное программное обеспечение sass будет компилировать только файлы, запрошенные вашими приложениями, поэтому мы должны включить (для визуализации) файл css где-нибудь, например, в `/views/layout.Джейд:
doctype html
html(lang="en")
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
link(rel="stylesheet", href="app.css") < we've added this
body!= body `/views/layout.jade`
обратите внимание, что в отличие от style.css
под stylesheets
подпапках,app.css
читать от корня (в данном случае /public
).
ремонт пути
С
app.use(
sass.middleware({
src: __dirname + '/sass',
dest: __dirname + '/public',
debug: true,
})
);
после первой компиляции, иерархия файлов и папок будет выглядеть так:
Project folder
app.js
public
app.css < This is where the compiled file goes
sytlesheets
style.css
sass
app.scss < This is where the sass file is
вы можете иметь скомпилированный вывод в , а не public
один; например, так:
Project folder
app.js
public
sytlesheets
app.css
style.css
sass
app.scss
таким образом, представление будет ссылаться на файлы css следующим образом:
link(rel='stylesheet', href='/stylesheets/style.css')
link(rel="stylesheet", href="/stylesheets/app.css")
однако, если вы измените конфигурацию промежуточного ПО sass на
app.use(
sass.middleware({
src: __dirname + '/sass',
dest: __dirname + '/public/stylesheets',
debug: true,
})
);
все будет идти груша форма.
при ссылке на файл css, например:
link(rel="stylesheet", href="stylesheets/app.css")
результирующий запрос будет для stylesheets/app.css
. Но так как мы дали Sass middleware следующую конфигурацию:
src: __dirname + '/sass',
он будет идти и искать /sass/stylesheets/app.scss
, и такого файла не существует.
одно из решений-сохранить конфигурацию как есть, но поместить все файлы sass в подпапку `/sass/stylesheets/. Но есть лучшее решение.
если вы определяете конфигурацию префикса вот так:
app.use(
sass.middleware({
src: __dirname + '/sass',
dest: __dirname + '/public/stylesheets',
prefix: '/stylesheets', // We've added prefix
})
);
он сообщит компилятору sass, что файл запроса всегда будет иметь префикс /stylesheets
и этот префикс следует игнорировать, таким образом, для запроса /stylesheets/app.css
, промежуточное ПО sass будет искать файл /sass/app.scss
, а не /sass/stylesheets/app.scss
.
код
app.js
var express = require('express'),
routes = require('./routes'),
sass = require('node-sass'),
path = require('path');
var app = module.exports = express.createServer();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(
sass.middleware({
src: __dirname + '/sass',
dest: __dirname + '/public/stylesheets',
prefix: '/stylesheets',
debug: true,
})
);
app.use(express.static(path.join(__dirname, 'public')));
});
макет.Джейд!--43-->
doctype html
html(lang="en")
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
link(rel="stylesheet", href="/stylesheets/app.css")
body!= body
папки и файлы
Project folder
app.js
public
sytlesheets
app.css
style.css
sass
app.scss
промежуточное ПО connect из узел-sass была выделена в узел-sass-промежуточное ПО. Используйте следующим образом:
var fs = require('fs'),
path = require('path'),
express = require('express'),
sassMiddleware = require('node-sass-middleware')
var app = module.exports = express();
// adding the sass middleware
app.use(
sassMiddleware({
src: __dirname + '/sass',
dest: __dirname + '/src/css',
debug: true,
})
);
// The static middleware must come after the sass middleware
app.use(express.static(path.join(__dirname, 'public')));