Contributions are always welcome, no matter how large or small. Before contributing, please read the code of conduct.
- install dependencies using npm
$ npm i- install command globally and link (in order to use the "bit-dev" command globaly and always use the latest development build)
npm run dev-linkif you want your command to be different then the default (bit-dev) just add your favorite command name as an argument to the script
npm run dev-link my-bit-dev-cmd-namebit will install these commands in /usr/local/bin/ directory, so in order to remove them just use the bash rm command.
rm /usr/local/bin/my-bit-dev-cmd-name- install
flowand make sure you haveflow-typedinstalled.
npm install -g flow-bin flow-typed- install type definitions using flow-typed
flow-typed install- build distributions:
npm run build- use with watch, to run the build on every code modification
npm run watch- run the unit tests
npm test- run the e2e tests (with default 'bit' command)
npm run e2e-test- run e2e tests using bit-dev command
npm run e2e-test --bit_bin=bit-devUse --debug flag to watch the running commands and the output. It might be a useful tool for debugging failed e2e tests.
Use --with_ssh flag to switch from exporting by using file-system to SSH approach. Make sure you are able to run 'ssh whoami@127.0.0.1' on your local.
When adding end to end tests please make sure new test files are created in the following name convention: name.e2e.[number].js where number should be 1/2/3. This was made in order to batch work in appveyor.
- run eslint and Flow
npm run lint- the project has lint issues with some of the files, the following lint command is including all the passed files
npm run lint-circle
We actively welcome your pull requests.
- Fork the repo and create your branch from
master. - If you've added code that should be tested, add tests.
- Ensure the test suite passes.
- Make sure your code lints.
- Add your change to the CHANGELOG.md file at the [unreleased] section.
A standard flow is as follows:
- A user enters Bit command.
- We use
commanderpackage to help with parsing the command. A command file insrc/cli/commandstakes care of the specific command details. - A command in
cli/commands/<command-name>goes to the API, which is insrc/apiand sends the action to run - The API has two main parts: Consumer and Scope, which are the two main concepts in Bit source code. See below explanations about them. In general, if a command related to the user local components it goes to the consumer, otherwise, it goes to the scope.
- The API loads the Consumer or the Scope and pass them the action to run.
- The command receives the response from the API as Promise and prints the results to the user.
The user workspace. The consumer root is the user workspace root directory.
It has a .bitmap file where it stores all the components locations on the filesystem.
It also has a bit.json file where it stores the user configuration, such as what compilers and testers are used.
When the user adds a new component (using bit add command), it is done on the consumer part only. The files are added to the .bitmap file and it doesn't involve the scope.
The model / objects. The scope root is located at <consumer-root>.bit or <consumer-root>/.git/.bit.
When a new component is tagged (using bit tag command), Bit compresses the component files and save them along with metadata about the component in the scope.
The file names are the hashes of the files/metadata. Think about it as .git in Git world.
The main players in the scope are: Component, Version and Source. All of them inherit from BitObject class.
Component has the general data about the component, such as the name, the scope and the versions.
Version has the data about a particular version of the component, it stores (among other things) the hashes of the files of that version.
Source is the actual file. It can be the component file or the dist file generated by Bit compiler.
By contributing to Bit, you agree that your contributions will be licensed under its Apache2 license.