-
Notifications
You must be signed in to change notification settings - Fork 25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
config: describe the main fields #284
base: master
Are you sure you want to change the base?
Conversation
56a5cff
to
4dbb567
Compare
8cd14c7
to
b2e17ee
Compare
b2e17ee
to
a7db60f
Compare
cc @Vittly |
packages/config/README.md
Outdated
|
||
Field | Type | Purpose | ||
--- | --- | --- | ||
root | `Boolean` | Used to determine the root directory from the current one |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you explain this? May be with an example
packages/config/README.md
Outdated
Field | Type | Purpose | ||
--- | --- | --- | ||
root | `Boolean` | Used to determine the root directory from the current one | ||
naming | `string`, `Object` | Name of existing in [`naming.preset`](https://github.com/bem/bem-sdk/tree/master/packages/naming.presets) preset or custom definition |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Name of one of [naming.presets] or custom preset definition" is better for me
packages/config/README.md
Outdated
root | `Boolean` | Used to determine the root directory from the current one | ||
naming | `string`, `Object` | Name of existing in [`naming.preset`](https://github.com/bem/bem-sdk/tree/master/packages/naming.presets) preset or custom definition | ||
levels | `Array<LevelConf>` | List of known levels in the right order<br> (usually local) with their configurations | ||
sets | `Object<string, SetConf>` | Named sets of layers to use in projects |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Levels/layers again :) What is layer? Why do we declare levels not layers above?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"to use in projects" > "to build" is better I think
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Layer is a property of a level. So we defining all levels but use just some.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good example with images at methodology will help I think
packages/config/README.md
Outdated
levels | `Array<LevelConf>` | List of known levels in the right order<br> (usually local) with their configurations | ||
sets | `Object<string, SetConf>` | Named sets of layers to use in projects | ||
libs | `Object<string, LibraryConf>` | Dependency libraries to use in sets | ||
plugins | `Object<string, PluginConf>` | Various configurations for plugins,<br>can be reached via [`.module`](#module) method |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
reference "how/where .module
is used" to docs or example is required
packages/config/README.md
Outdated
|
||
#### `LevelConf` | ||
|
||
Describes level with sources. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
level > redefinition level + link to methodology article
packages/config/README.md
Outdated
In modern version represents a set of layers relative to library path (`.bemrc` location) | ||
and depends on naming preset — e.g. `common` and `desktop` for just `bem-components/` (library) path and [`origin`](https://github.com/bem/bem-sdk/blob/master/packages/naming.presets/origin.js) preset. | ||
|
||
- `layer` - name of level‘s layer to use in sets |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sets > sets
option OR SetConf
packages/config/README.md
Outdated
Describes level with sources. | ||
In classic version it represents a directory for a single layer — e.g. `bem-components/common.blocks/` for `common` or `bem-components/desktop.blocks/` for `desktop`. | ||
In modern version represents a set of layers relative to library path (`.bemrc` location) | ||
and depends on naming preset — e.g. `common` and `desktop` for just `bem-components/` (library) path and [`origin`](https://github.com/bem/bem-sdk/blob/master/packages/naming.presets/origin.js) preset. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
More text is needed. May be example can help or methodology article somewhere in https://en.bem.info/methodology/
packages/config/README.md
Outdated
- `layer` - name of level‘s layer to use in sets | ||
- `naming` - naming preset for this level | ||
- `path` - optional. required for legacy way, unwanted for the modern one | ||
- the rest fields will have passed to level config |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to explain why do someone need other fields
packages/config/README.md
Outdated
#### `LibraryConf` | ||
|
||
- `path` - to library which should better contain their own `.bemrc` file with their own sets | ||
- the rest fields will have passed to library config and extend `.bemrc` config found at `${path}/.bemrc` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
path
- path (repeating is okey) to library. Library should contain its own .bemrc
file. If omitted path is evaluated to node_modules/${libraryName}
(shorted sentences are more readable)
|
||
One of: | ||
- single string with all used layers; e.g. `'bem-core@ common deskpad desktop'` | ||
- list of layers and/or libraries and library sets; e.g. `[{library: 'bem-core'}, 'common', 'deskpad', 'desktop']` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please add variant with library and set in one item
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
actually, if set is undefined then the current one will be used by default.
Not sure how to show it in one sentence
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Your definition "if set is undefined then the current one will is used by default" is okey. Write more short sentences
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In this version we missed 'bem-core@desktop'
and { library: 'bem-core', layer: 'desktop' }
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"targets specific layer in library"
just pushed tiny update |
.bemrc | ||
.bemrc | ||
``` | ||
and `/projects/prj1/` as current working directory `root` option set to `true` in `/projects/prj1/.bemrc` will prevent `bem-config` to collect data from `/projects/.bemrc` and `/.bemrc`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Too complicated. We shall to come up with basic process of bem/sdk-config
walking file system and collecting bemrc
.
Start with more realistic example:
project/
src/
libs/
fooLib/
.bemrc
.bemrc
And tell "config of project contains of two .bemrc
" and define merge algorithm. After it we can explain things like root
-property
#### `LevelConf` | ||
|
||
Describes [redefinition level](https://en.bem.info/methodology/key-concepts/#redefinition-level) with sources — a set of layers relative to library path (`.bemrc` location) | ||
and depends on naming preset. E.g. `common` and `desktop` for `bem-components/` (library) path and [`origin`](https://github.com/bem/bem-sdk/blob/master/packages/naming.presets/origin.js) preset. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"a set of layers relative to library path (...)" - is very good.
The second part is not. Can we simply add some examples:
{ layer: 'common', path: 'foo/bar' }
defines set of one layer with relative path 'foo/bar'
{ layer: 'common' }
defines set of layers depending on naming. Relative paths can be 'common.blocks/'
, 'blocks-common'
, etc.
Am I right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You are right.
We want to merge levels
into libraries
(as it is semantically the same) but @tadatuta worries about classic definition of level
.
What you think if we just move this part to the library
description with any custom fields?
Usualy it represents a directory for a single layer — e.g. `bem-components/common.blocks/` for `common` or `bem-components/desktop.blocks/` for `desktop`. | ||
|
||
- `layer` - name of level‘s layer to use in `sets` option | ||
- `naming` - naming preset for this level |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is default value here? Root naming
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Guess, it should be 'origin'
. Let's write here about it if no one against
Field | Type | Purpose | ||
--- | --- | --- | ||
root | `Boolean` | Used to determine the root directory. Configs in parent dirs won't be gathered | ||
naming | `string`, `Object` | Name of one of [naming presets](https://github.com/bem/bem-sdk/tree/master/packages/naming.presets) or custom naming definition |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And default value?
- `layer` - name of level‘s layer to use in `sets` option | ||
- `naming` - naming preset for this level | ||
- `path` - optional, deprecated. Required for legacy way, unwanted for the modern one | ||
- the rest fields will be passed to level config (if required by some custom consumer) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, it's deprecated... So example above is bad idea. Can we put properties in a table | Field | Property | Type |
?
{ | ||
"layer": "common", | ||
"naming": "origin", | ||
"scheme": "nested" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
scheme? Is it an example of custom property? Can we add a comment for it?
|
||
One of: | ||
- single string with all used layers; e.g. `'bem-core@ common deskpad desktop'` | ||
- list of layers and/or libraries and library sets; e.g. `[{library: 'bem-core'}, 'common', 'deskpad', 'desktop']` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In this version we missed 'bem-core@desktop'
and { library: 'bem-core', layer: 'desktop' }
|
||
#### `LibraryConf` | ||
|
||
- `path` - path (repeating is okey) to library. Library should contain its own .bemrc file. If omitted path is evaluated to node_modules/${libraryName} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please put bemrc and node_modules/... in ticks
|
||
#### `PluginConf` | ||
|
||
- all the fields will be passed directly to plugins |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What plugins? Can we add an example?
`string|Array<string|{library: string, set?: string}>` | ||
|
||
One of: | ||
- single string with all used layers; e.g. `'bem-core@ common deskpad desktop'` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mistake. Right form is @bem-core
#### `LibraryConf` | ||
|
||
- `path` - path (repeating is okey) to library. Library should contain its own .bemrc file. If omitted path is evaluated to node_modules/${libraryName} | ||
- the rest fields will be passed to library config and extend `.bemrc` config found at `${path}/.bemrc` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems it is not true. librarySync
for example computes cwd from LibraryConf only
I need some extra effort here @tadatuta |
--- | --- | --- | ||
root | `Boolean` | Used to determine the root directory. Configs in parent dirs won't be gathered | ||
naming | `string`, `Object` | Name of one of [naming presets](https://github.com/bem/bem-sdk/tree/master/packages/naming.presets) or custom naming definition | ||
levels | `Array<LevelConf>` | List of known levels in the right order<br> (usually local) with their configurations |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Feels like we don't need the difference between levels and libraries — in all cases they are the same.
Let's drop this field in favor of layerOrder: string[]
since we need to only to define ordering between layers for now and it's almost useless logic for the most of our users.
If we need to configure some directory (originally levels) with additional fields we should convert them to libraries and define in libs
field. path
there would start with './'
as it does in nodejs's require
function so it will be very familiar too.
So:
- Dropping
levels
- Adding
layerOrder
- Filtering libraries, if need to get local ones (configured "levels")
|
||
Usualy it represents a directory for a single layer — e.g. `bem-components/common.blocks/` for `common` or `bem-components/desktop.blocks/` for `desktop`. | ||
|
||
- `layer` - name of level‘s layer to use in `sets` option |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Guess we don't need to write level's
here. No one should care about level
in new paradigm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
level's
→ semantic
cc @tadatuta