From f558648b74e8a75b8cffd1472ea7fc03373f6e21 Mon Sep 17 00:00:00 2001 From: Vladimir Grinenko Date: Thu, 18 Jul 2013 03:40:14 +0300 Subject: [PATCH] Use bem-environ --- .bem/environ.js | 134 ------------------------- .bem/levels/benchmarks.js | 16 ++- .bem/levels/blocks.js | 13 +-- .bem/levels/bundles.js | 19 ++-- .bem/make.js | 29 +++--- .bem/nodes/arch.js | 107 -------------------- .bem/repo.db.js | 8 ++ .gitignore | 5 +- desktop.bundles/.bem/level.js | 18 ++-- desktop.bundles/index/index.bemjson.js | 3 +- package.json | 3 +- 11 files changed, 65 insertions(+), 290 deletions(-) delete mode 100644 .bem/environ.js delete mode 100644 .bem/nodes/arch.js diff --git a/.bem/environ.js b/.bem/environ.js deleted file mode 100644 index 77cc2af8..00000000 --- a/.bem/environ.js +++ /dev/null @@ -1,134 +0,0 @@ -var PATH = require('path'), - - environ = exports, - - /** - * @const - * @private - */ - __root = getGlobalRoot(), - - /** - * Константы, зависящие от окружения `ENV_ROOT` - * - * NOTE: список названий констант, которые могут быть переопределены - * на уровне проекта. - * - * @private - * @type Array - */ - __extendables = ['LIB_DIR', 'LIB_ROOT'], - - /** @type Function */ - join = PATH.join, - /** @type Function */ - relative = PATH.relative, - /** @type Function */ - resolve = PATH.resolve.bind(null, __dirname), - /** @type Function */ - envresolve = PATH.resolve.bind(null, __root), - - /** - * Путь до корня окружения - * - * NOTE: под окружением подразумеваем проект, сборку которого - * мы осуществляем. - * - * @type String - * @exports ENV_ROOT - */ - ENV_ROOT = exports.ENV_ROOT = envresolve('../'), - - /** - * Путь до корня проекта - * @type String - * @exports PRJ_ROOT - */ - PRJ_ROOT = exports.PRJ_ROOT = resolve('../'), - - /** - * Имя директории куда складываем библиотеки - * @type String - * @exports LIB_DIR - */ - LIB_DIR = exports.LIB_DIR = '.', - - /** - * Путь до корня хранилища библиотек - * - * NOTE: путь расчитывается относительно корня окружения `ENV_ROOT` - * пока нет способа описать зависимости в библиотеках. - * - * @type String - * @exports LIB_ROOT - */ - LIB_ROOT = exports.LIB_ROOT = join(ENV_ROOT, LIB_DIR), - - /** - * Имя директории с .bem-конфигами - * @type String - * @exports CONF_DIR - */ - CONF_DIR = exports.CONF_DIR = 'configs', - - /** - * Путь до директории с .bem-конфигами - * @type String - * @exports CONF_ROOT - */ - CONF_ROOT = exports.CONF_ROOT = resolve(CONF_DIR), - - /** - * «Текущая» конфигурация - * @exports getConf - * @returns {Object} - */ - getConf = exports.getConf = function() { - return require(join(environ.CONF_ROOT, 'current')); - }, - - /** - * Абсолютный путь до библиотеки `lib` - * @exports getLibPath - * @param {String} lib id библиотеки - * @param {String} [...path] - * @returns {String} - */ - getLibPath = exports.getLibPath = function() { - var args = [].slice.call(arguments, 0); - return join.apply(null, [environ.LIB_ROOT].concat(args)); - }, - - /** - * Путь до библиотеки `lib` относительно корня проекта - * @exports getLibRelPath - * @param {String} lib id библиотеки - * @param {String} [...path] - * @returns {String} - */ - getLibRelPath = exports.getLibRelPath = function() { - return relative(environ.PRJ_ROOT, getLibPath.apply(null, arguments)); - }; - -if(__root !== __dirname) { - try { - // Переопределяем константы `__extendables` из окружения проекта `ENV_ROOT` - var rootEnviron = require(join(__root, 'environ')); - - __extendables.reduce(function(exports, name) { - var v = rootEnviron[name]; - typeof v === 'undefined' || (exports[name] = v); - return exports; - }, module.exports); - - // Устанавливаем новое значение `__root_level_dir` - process.env.__root_level_dir = __root; - } catch(e) { - // do something useful - } -} - -function getGlobalRoot() { - var root = process.env.__root_level_dir; - return root || (root = __dirname); -} \ No newline at end of file diff --git a/.bem/levels/benchmarks.js b/.bem/levels/benchmarks.js index ad42d6d6..2e73dfea 100644 --- a/.bem/levels/benchmarks.js +++ b/.bem/levels/benchmarks.js @@ -1,14 +1,20 @@ -var PATH = require('path'); +var PATH = require('path'), + environ = require('bem-environ'), + join = PATH.join, + + PRJ_ROOT = environ.PRJ_ROOT, + PRJ_TECHS = join(PRJ_ROOT, '.bem/techs'), + BEMBL_TECHS = environ.getLibPath('bem-bl', 'blocks-common/i-bem/bem/techs'); exports.baseLevelPath = require.resolve('./bundles.js'); exports.getTechs = function() { return { - 'bemjson.js' : PATH.resolve(__dirname, '../techs/bemjson.js'), - 'bemdecl.js' : 'bemdecl.js', - 'deps.js' : 'deps.js', - 'bemhtml' : PATH.resolve(__dirname, '../../bem-bl/blocks-common/i-bem/bem/techs/bemhtml.js') + 'bemjson.js' : join(PRJ_TECHS, 'bemjson.js'), + 'bemdecl.js' : 'v2/bemdecl.js', + 'deps.js' : 'v2/deps.js', + 'bemhtml' : PATH.resolve(BEMBL_TECHS, 'v2/bemhtml.js') }; }; diff --git a/.bem/levels/blocks.js b/.bem/levels/blocks.js index 905356ef..6806e01f 100644 --- a/.bem/levels/blocks.js +++ b/.bem/levels/blocks.js @@ -1,19 +1,16 @@ var PATH = require('path'), - - pjoin = PATH.join, - presolve = PATH.resolve.bind(null, __dirname), - - environ = require('../environ'), + environ = require('bem-environ'), + join = PATH.join, PRJ_ROOT = environ.PRJ_ROOT, - PRJ_TECHS = pjoin(PRJ_ROOT, '.bem/techs'), + PRJ_TECHS = join(PRJ_ROOT, '.bem/techs'), BEMBL_TECHS = environ.getLibPath('bem-bl', 'blocks-common/i-bem/bem/techs'); exports.getTechs = function() { return { - 'js' : pjoin(BEMBL_TECHS, 'js.js'), + 'js' : join(BEMBL_TECHS, 'js.js'), 'css' : 'css', 'ie.css' : 'ie.css', 'ie6.css' : 'ie6.css', @@ -21,7 +18,7 @@ exports.getTechs = function() { 'ie8.css' : 'ie8.css', 'ie9.css' : 'ie9.css', - 'bemhtml' : pjoin(BEMBL_TECHS, 'bemhtml.js'), + 'bemhtml' : join(BEMBL_TECHS, 'bemhtml.js'), }; }; diff --git a/.bem/levels/bundles.js b/.bem/levels/bundles.js index 46a33846..7c6353f1 100644 --- a/.bem/levels/bundles.js +++ b/.bem/levels/bundles.js @@ -1,18 +1,15 @@ var PATH = require('path'), + environ = require('bem-environ'), + join = PATH.join, - pjoin = PATH.join, - presolve = PATH.resolve.bind(null, __dirname), - - PRJ_ROOT = presolve('../../'), - - PRJ_TECHS = presolve('../techs/'), - BEMBL_TECHS = pjoin(PRJ_ROOT, 'bem-bl/blocks-common/i-bem/bem/techs'); - + PRJ_ROOT = environ.PRJ_ROOT, + PRJ_TECHS = join(PRJ_ROOT, '.bem/techs'), + BEMBL_TECHS = environ.getLibPath('bem-bl', 'blocks-common/i-bem/bem/techs'); exports.getTechs = function() { return { - 'bemjson.js' : pjoin(PRJ_TECHS, 'bemjson.js'), + 'bemjson.js' : join(PRJ_TECHS, 'bemjson.js'), 'bemdecl.js' : 'v2/bemdecl.js', 'deps.js' : 'v2/deps.js', 'js' : 'v2/js-i', @@ -23,8 +20,8 @@ exports.getTechs = function() { 'ie8.css' : 'v2/ie8.css', 'ie9.css' : 'v2/ie9.css', - 'bemhtml' : pjoin(BEMBL_TECHS, 'v2/bemhtml.js'), - 'html' : pjoin(BEMBL_TECHS, 'html.js') + 'bemhtml' : join(BEMBL_TECHS, 'v2/bemhtml.js'), + 'html' : join(BEMBL_TECHS, 'html.js') }; }; diff --git a/.bem/make.js b/.bem/make.js index f0ba05a1..1aa5e5c7 100644 --- a/.bem/make.js +++ b/.bem/make.js @@ -1,11 +1,12 @@ -/*global MAKE:true */ -var PATH = require('path'); +/* jshint node:true */ +/* global MAKE */ -"use strict"; +require('bem-environ/lib/nodes'); -//process.env.YENV = 'production'; +var PATH = require('path'), + environ = require('bem-environ'); -require('./nodes/arch'); +//process.env.YENV = 'production'; MAKE.decl('Arch', { @@ -14,7 +15,7 @@ MAKE.decl('Arch', { libraries: [ 'bem-bl @ 0.3', - 'bem-controls @ v1.0.0' + 'bem-controls @ v1' ] }); @@ -41,7 +42,6 @@ MAKE.decl('BundleNode', { 'js', 'css', 'ie.css', - 'ie6.css', 'ie7.css', 'ie8.css', 'ie9.css', @@ -53,11 +53,16 @@ MAKE.decl('BundleNode', { getLevels: function(tech) { if (PATH.basename(this.level.dir) === 'benchmark.bundles') { - return ['../bem-bl/blocks-common', - '../bem-bl/blocks-desktop', - '../common.blocks', - '../desktop.blocks'] - .map(function(path) { return PATH.resolve(__dirname, path) } ); + return [ + 'bem-bl/blocks-common', + 'bem-bl/blocks-desktop' + ] + .map(function(path) { return PATH.resolve(environ.LIB_ROOT, path); }) + .concat([ + 'common.blocks', + 'desktop.blocks' + ] + .map(function(path) { return PATH.resolve(environ.PRJ_ROOT, path); })); } return this.__base(tech); diff --git a/.bem/nodes/arch.js b/.bem/nodes/arch.js deleted file mode 100644 index 74cf26bb..00000000 --- a/.bem/nodes/arch.js +++ /dev/null @@ -1,107 +0,0 @@ -var PATH = require('path'), - GLOBAL_ROOT_NAME = '__root_level_dir', - DECL_SEP = '@'; - -// XXX: `__root_level_dir` должна быть установлена только один раз -process.env[GLOBAL_ROOT_NAME] || - (process.env[GLOBAL_ROOT_NAME] = PATH.dirname(__dirname)); - -var environ = require('../environ'), - registry = require('bem/lib/nodesregistry'); - -registry.decl('Arch', { - - /** - * Defines projects libraries dependencies base on environ's config - * - * @param {Array} libs Array of libraries' ids - * @return {Object} - */ - useLibraries : function(libs) { - // {Array} known libraries - var repo = environ.getConf().libraries, - relative = PATH.relative.bind(null, this.root), - getLibPath = environ.getLibPath; - - return libs.reduce(function(enabled, lib) { - var treeish; - - if(lib.indexOf(DECL_SEP) !== -1) { - var parts = lib.split(DECL_SEP); - - lib = parts[0].trim(); - treeish = parts.splice(1).join(DECL_SEP).trim(); - } - - if(repo[lib] == null) { - throw new Error('Library ' + lib + ' is not registered!'); - } - - var decl = repo[lib]; - treeish && (decl.treeish = treeish); - - enabled[relative(getLibPath(lib))] = decl; - - return enabled; - }, {}); - }, - - /** - * @returns {Object} - * @override - */ - getLibraries : function() { - var libs = this.libraries; - return Array.isArray(libs)? - this.useLibraries(libs) : libs; - }, - - /** - * @returns {Array} - * @override - */ - createBlockLibrariesNodes : function() { - var libs = this.__base.apply(this, this.opts.force? arguments : null), - libsNodeName = environ.LIB_DIR, - node = new (registry.getNodeClass('Node'))( - libsNodeName === '.'? 'libs' : libsNodeName); - - this.arch.setNode(node, null, libs); - - /** - * XXX: hack! - * Saving array of lib nodes for future subtraction from Block|Bundles nodes - */ - return this._libraries = libs; - }, - - /** - * Substracting LibrariesNodes from `nodes` array for prevent linking them with - * caller nodes - * - * @param {Array} nodes - * @returns {Array} - */ - subtractLibrariesNodes : function(nodes) { - return this.opts.force? nodes : nodes.filter(function(n) { - return this._libraries.indexOf(n) === -1; - }, this); - }, - - /** - * @override - */ - createBlocksLevelsNodes: function(parent, children) { - return this.__base.call(this, parent, - this.subtractLibrariesNodes.call(this, children)); - }, - - /** - * @override - */ - createBundlesLevelsNodes: function(parent, children) { - return this.__base.call(this, parent, - this.subtractLibrariesNodes.call(this, children)); - } - -}); \ No newline at end of file diff --git a/.bem/repo.db.js b/.bem/repo.db.js index 77ba7911..b644c3b3 100644 --- a/.bem/repo.db.js +++ b/.bem/repo.db.js @@ -19,6 +19,10 @@ module.exports = { type : 'git', url : 'git://github.com/bem/bem-bl.git' }, + 'bem-history' : { + type : 'git', + url : 'git://github.com/bem/bem-history.git' + }, 'bem-controls' : { type : 'git', url : 'git://github.com/bem/bem-controls.git' @@ -27,6 +31,10 @@ module.exports = { type : 'git', url : 'git://github.com/bem/bem-core.git' }, + 'bem-mvc' : { + type : 'git', + url : 'git://github.com/bem/bem-mvc.git' + }, 'bem-gen-doc' : { type : 'git', url : 'git://github.com/bem/bem-gen-doc.git', diff --git a/.gitignore b/.gitignore index ba17fb9b..0708ba6d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -bem-bl/ -bem-controls/ +libs/ node_modules/ .DS_Store .idea @@ -9,5 +8,3 @@ node_modules/ *.bundles/*/*.* !*.bundles/*/*.bemjson.js !*.bundles/.bem/* -*.bundles/.bem/cache/ -*.blocks/.bem/cache/ diff --git a/desktop.bundles/.bem/level.js b/desktop.bundles/.bem/level.js index 98ab185e..cb287fd7 100644 --- a/desktop.bundles/.bem/level.js +++ b/desktop.bundles/.bem/level.js @@ -1,4 +1,6 @@ -var BEM = require('bem'); +var PATH = require('path'), + BEM = require('bem'), + environ = require('bem-environ'); exports.baseLevelPath = require.resolve('../../.bem/levels/bundles.js'); @@ -6,11 +8,15 @@ exports.getConfig = function() { return BEM.util.extend(this.__base() || {}, { bundleBuildLevels: this.resolvePaths([ - '../../bem-bl/blocks-common', - '../../bem-bl/blocks-desktop', - '../../common.blocks', - '../../desktop.blocks' - ]) + 'bem-bl/blocks-common', + 'bem-bl/blocks-desktop' + ] + .map(function(path) { return PATH.resolve(environ.LIB_ROOT, path); }) + .concat([ + 'common.blocks', + 'desktop.blocks' + ] + .map(function(path) { return PATH.resolve(environ.PRJ_ROOT, path); }))) }); }; diff --git a/desktop.bundles/index/index.bemjson.js b/desktop.bundles/index/index.bemjson.js index 38fbc6cd..7ae5338d 100644 --- a/desktop.bundles/index/index.bemjson.js +++ b/desktop.bundles/index/index.bemjson.js @@ -5,8 +5,7 @@ head: [ { elem: 'css', url: '_index.css', ie: false }, { elem: 'css', url: '_index', ie: true }, - { elem: 'meta', attrs: { name: 'description', content: '' }}, - { elem: 'meta', attrs: { name: 'keywords', content: '' }} + { elem: 'meta', attrs: { name: 'description', content: '' }} ], content:[ { diff --git a/package.json b/package.json index f19a225b..5c4b7b1f 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "node": "0.6 | 0.8 | 0.10" }, "dependencies": { - "bem" : "~0.6.4" + "bem" : "~0.6.4", + "bem-environ" : "~1.0.1" }, "devDependencies": {}, "private": true