Switch to parceljs for bundling, eslint for linting, drop grunt

This commit is contained in:
David Humphrey (:humph) david.humphrey@senecacollege.ca 2018-06-28 13:35:20 -04:00 committed by David Humphrey
parent 2e90fdae0c
commit d61c61aab8
14 changed files with 15694 additions and 3565 deletions

3
.babelrc Normal file
View File

@ -0,0 +1,3 @@
{
"presets": [ "env" ]
}

1
.eslintignore Normal file
View File

@ -0,0 +1 @@
tests/dist/

32
.eslintrc.json Normal file
View File

@ -0,0 +1,32 @@
{
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"mocha": true,
"node": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 2017,
"sourceType": "module"
},
"rules": {
"indent": [
"error",
2
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"single"
],
"semi": [
"error",
"always"
]
}
}

4
.gitignore vendored
View File

@ -3,3 +3,7 @@ bower_components
.env .env
*~ *~
dist/filer-issue225.js dist/filer-issue225.js
# Parcel build dirs
.cache
tests/dist

View File

@ -9,60 +9,28 @@ message and I'll update it.
## Setup ## Setup
The Filer build system is based on [grunt](http://gruntjs.com/). To get a working build system To get a working build system do the following:
do the following:
``` ```
npm install npm install
npm install -g grunt-cli
``` ```
You can now run the following grunt tasks: You can now run the following `npm` scripts:
* `grunt jshint` will run [JSHint](http://www.jshint.com/) on your code (do this before submitting a pull request) to catch errors
* `grunt develop` will create a single file version of the library for testing in `dist/filer.js` * `npm test` will build Filer and the tests in `tests/` and start a web server at http://localhost:1234 where you can run the tests.
* `grunt release` like `develop` but will also create a minified version of the library in `dist/filer.min.js` * `npm lint` will run `eslint` on the `src` and `tests` directories.
* `grunt test` or `grunt test-node` will run [JSHint](http://www.jshint.com/) on your code and the test suite in the context of `nodejs` * `npm run build` will bundle two versions of Filer: `dist/filer.js` (unminified) and `dist/filer.min.js` (minified) as well as source map files.
* `grunt test-browser` will run [JSHint](http://www.jshint.com/) and start a localhost server on port `1234`. Navigating to `localhost:1234/tests/index.html` will run the test suite in the context of the browser. **NOTE:** When finished, you will have to manually shut off the server by pressing `cmd/ctrl`+`c` in the same terminal session you ran `grunt test-browser`.
Once you've done some hacking and you'd like to have your work merged, you'll need to Once you've done some hacking and you'd like to have your work merged, you'll need to
make a pull request. If you're patch includes code, make sure to check that all the make a pull request. If you're patch includes code, make sure to check that all the
unit tests pass, including any new tests you wrote. Finally, make sure you add yourself unit tests pass, including any new tests you wrote. Finally, make sure you add yourself
to the `AUTHORS` file. to the `AUTHORS` file.
=======
### Releasing a new version
=======
`grunt publish` will:
* Run the `grunt release` task
* Bump `bower.json` & `package.json` version numbers according to a [Semver](http://semver.org/) compatible scheme (see ["How to Publish"](#how-to-publish) below)
* Create a git tag at the new version number
* Create a release commit including `dist/filer.js`, `dist/filer.min.js`, `bower.json` and `package.json`
* Push tag & commit to `origin/develop`
* Update the `gh-pages` branch with the contents of the `develop` branch
* Force push the `gh-pages` branch to `origin/gh-pages`
* Publish the new version of the module to NPM
#### How to configure
1. Copy `env.sample` to `.env`
2. Modify as needed, or leave alone for defaults
#### How to Publish
`grunt publish` can be run in four ways:
1. `grunt publish` - does a patch (x.x.X) bump
2. `grunt publish:patch` - also does a patch (x.x.X) bump
3. `grunt publish:minor` - does a minor (x.X.x) bump
4. `grunt publish:major` - does a major (X.x.x) bump
The user *must* be on their local `develop` branch before running any form of `grunt publish`, or else the task will fail loudly.
======= =======
## Tests ## Tests
Tests are writting using [Mocha](http://visionmedia.github.io/mocha/) and [Chai](http://chaijs.com/api/bdd/). Tests are writting using [Mocha](http://visionmedia.github.io/mocha/) and [Chai](http://chaijs.com/api/bdd/).
You can run the tests in your browser by running `grunt test-browser` and opening the `tests` directory @ `http://localhost:1234/tests`, or in a nodejs context by running `grunt test`. You can run the tests in your browser by running `npm test` and opening your browser to `http://localhost:1234`.
There are a number of configurable options for the test suite, which are set via query string params. There are a number of configurable options for the test suite, which are set via query string params.
First, you can choose which filer source to use (i.e., src/, dist/filer-test.js, dist/filer.js or dist/filer.min.js). First, you can choose which filer source to use (i.e., src/, dist/filer-test.js, dist/filer.js or dist/filer.min.js).
@ -84,129 +52,3 @@ an example.
## Communication ## Communication
If you'd like to talk to someone about the project, you can reach us on irc.mozilla.org in the #filer or #mofodev channel. Look for "ack" or "humph". If you'd like to talk to someone about the project, you can reach us on irc.mozilla.org in the #filer or #mofodev channel. Look for "ack" or "humph".
## Grunt tasks
The six grunt tasks Filer provides for development are detailed here, including a description of the third party tasks that are used to complete the process in the order they are used. For details on the grunt task running framework, see [http://gruntjs.com/](http://gruntjs.com/).
Individual targets are shown *in italics*:
### 1. grunt develop
*This task is responsible for producing the Filer distribution files.*
#### `browserify` ([https://www.npmjs.org/package/grunt-browserify](https://www.npmjs.org/package/grunt-browserify))
* *:filerDist*: Combines the filer source tree into a single distribution file for the bower releases.
#### `uglify` ([https://www.npmjs.com/package/grunt-contrib-uglify](https://www.npmjs.com/package/grunt-contrib-uglify))
* Adds a banner to ensure every release's distribution files are unique (**NOTE**: This is required for a successful `grunt release`)
### 2. grunt release
*This task runs the `grunt test`, and `grunt develop` tasks in one command, preventing new distribution files from being generated if tests fail.*
### 3. grunt build-tests
*This task generates single-file versions of the test suite and a separate Filer distribution file for testing Filer's compatibility with the [requirejs module system](http://requirejs.og/).*
#### `clean` ([https://www.npmjs.com/package/grunt-contrib-clean](https://www.npmjs.com/package/grunt-contrib-clean))
* Deletes the current browserified test files (see [http://browserify.org/](http://browserify.org/) for more details)
#### `browserify` ([https://www.npmjs.org/package/grunt-browserify](https://www.npmjs.org/package/grunt-browserify))
* *:filerPerf*: Combines performance tests into a single distribution file for browser performance benchmarks
* *:filerTest*: Combines unit tests into a single distribution file for testing Filer in the browser
* *:filerIssue225*: Used to generate a distribution file for testing based on the current state of the code, without affecting the current release's distribution file
### 4. grunt test-node
*This task lints and tests the Filer library in a nodejs context, aborting if any of the subtasks fail.*
#### `jshint` ([https://www.npmjs.com/package/grunt-contrib-jshint](https://www.npmjs.com/package/grunt-contrib-jshint))
* Used to lint the source files.
#### `browserify` ([https://www.npmjs.org/package/grunt-browserify](https://www.npmjs.org/package/grunt-browserify))
* *:filerIssue225*: Used to generate a distribution file for testing based on the current state of the code, without affecting the current release's distribution file
#### `shell` ([https://www.npmjs.com/package/grunt-shell](https://www.npmjs.com/package/grunt-shell))
* *:mocha*: Runs Filer's test suite on nodejs using the mocha test framework from the command line interface
### 5. grunt test-browser
*This task generates all the files necessary for running Filer's test suite in a browser, and starts a simple HTTP server to access the tests from your browser of choice*
#### `jshint` ([https://www.npmjs.com/package/grunt-contrib-jshint](https://www.npmjs.com/package/grunt-contrib-jshint))
* Used to lint the source files.
#### `build-tests` ([#3-grunt-build-tests](#3-grunt-build-tests))
* Generates single-file versions of the test suite and a separate Filer distribution file for testing Filer's compatibility with the [requirejs module system](http://requirejs.og/).
#### `connect` ([https://www.npmjs.com/package/grunt-contrib-connect](https://www.npmjs.com/package/grunt-contrib-connect))
* *:serverForBrowser*: Starts a simple HTTP server pointing at the root of the Filer directory. Browsing to the '/tests/' directory will run the Filer tests in the browser.
### 6. grunt publish
#### `prompt` ([https://www.npmjs.com/package/grunt-prompt](https://www.npmjs.com/package/grunt-prompt))
* *confirm*: Interactive prompt task, used to confirm the kind of version release being requested by the user, and to give them an opportunity to abort the release. The prompt message is generated in the `grunt publish` task itself.
#### `npm-checkbranch` ([https://github.com/sedge/grunt-npm/tree/branchcheck](https://github.com/sedge/grunt-npm/tree/branchcheck))
* Causes `grunt publish` to fail out early if the user is not on the `develop` branch
#### `release` ([#2-grunt-release](#2-grunt-release))
* Runs the `grunt test`, and `grunt develop` tasks in one command, preventing new distribution files from being generated if tests fail.
#### `bump` ([https://www.npmjs.com/package/grunt-bump](https://www.npmjs.com/package/grunt-bump))
* Responsible for creating the latest tag and release commit of the repo. In order, it:
1. Bumps the version number in Filer's `package.json` and `bower.json` files
2. Creates a release commit including updated manifest files and new filer distribution files
3. Tags the repo at this new version
4. Pushes the tag and the release commit upstream
#### `build-tests` ([#3-grunt-build-tests](#3-grunt-build-tests))
* Generates single-file versions of the test suite and a separate Filer distribution file for testing Filer's compatibility with the [requirejs module system](http://requirejs.og/).
#### `usebanner` ([https://www.npmjs.com/package/grunt-banner](https://www.npmjs.com/package/grunt-banner))
* *:publish*: Adds a banner to the generated test and performance test files. The banner contents are generated as part of the `grunt publish` task itself.
#### `gitadd` ([https://www.npmjs.com/package/grunt-git](https://www.npmjs.com/package/grunt-git))
* *:publish*: Adds the Filer test files to git's staging area to allow us to stash it in the next step
#### `gitstash` ([https://www.npmjs.com/package/grunt-git](https://www.npmjs.com/package/grunt-git))
* *:publish*: Stashes the Filer test files in preparation for switching to the `gh-pages` branch in the next step
#### `gitcheckout` ([https://www.npmjs.com/package/grunt-git](https://www.npmjs.com/package/grunt-git))
* *:publish*: Checks out the `gh-pages` branch to prepare for committing the newly generated test files in the next three steps
#### `gitrm` ([https://www.npmjs.com/package/grunt-git](https://www.npmjs.com/package/grunt-git))
* *:publish*: Equivalent of `git rm -f`, this task forces a removal of the existing versions of the generated test files on this branch in preparation for the next step.
#### `gitstash` ([https://www.npmjs.com/package/grunt-git](https://www.npmjs.com/package/grunt-git))
* *:pop*: Equivalent of `git stash pop`, this task reintroduces the staging area containing the newest version of the generated test files.
#### `gitcommit` ([https://www.npmjs.com/package/grunt-git](https://www.npmjs.com/package/grunt-git))
* *:publish*: This task commits the current staging area containing the newly generated test files. The commit message is generated during the `grunt publish` task itself.
#### `gitpush` ([https://www.npmjs.com/package/grunt-git](https://www.npmjs.com/package/grunt-git))
* *:publish*: This task pushes the local `gh-pages` branch to the remote specified in Filer's .env file as FILER_UPSTREAM_REMOTE_NAME.
#### `gitcheckout` ([https://www.npmjs.com/package/grunt-git](https://www.npmjs.com/package/grunt-git))
* *:revert*: This task checks out back to the main branch ('develop' by default, specified in the .env as FILER_UPSTREAM_BRANCH)
#### `npm-publish` ([https://www.npmjs.com/package/grunt-npm](https://www.npmjs.com/package/grunt-npm))
* Publishes the latest release to NPM

View File

@ -1,15 +0,0 @@
{
"name": "filer",
"version": "0.0.44",
"main": "dist/filer.js",
"ignore": [
"build",
"examples",
"package.json",
"tests",
"gruntfile.js",
"node_modules",
"src",
"tools"
]
}

12040
dist/filer.js vendored

File diff suppressed because it is too large Load Diff

1
dist/filer.map vendored Normal file

File diff suppressed because one or more lines are too long

85
dist/filer.min.js vendored

File diff suppressed because one or more lines are too long

1
dist/filer.min.map vendored Normal file

File diff suppressed because one or more lines are too long

7805
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -15,40 +15,27 @@
"author": "Alan K <ack@modeswitch.org> (http://blog.modeswitch.org)", "author": "Alan K <ack@modeswitch.org> (http://blog.modeswitch.org)",
"homepage": "http://filerjs.github.io/filer", "homepage": "http://filerjs.github.io/filer",
"bugs": "https://github.com/filerjs/filer/issues", "bugs": "https://github.com/filerjs/filer/issues",
"license": "BSD", "license": "BSD-2-Clause",
"scripts": { "scripts": {
"test": "grunt test" "lint": "eslint src tests",
"test": "parcel tests/index.html --out-dir tests/dist",
"prebuild": "parcel build --global Filer src/index.js --no-minify --out-file filer.js",
"build": "parcel build --global Filer src/index.js --out-file filer.min.js --detailed-report"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/filerjs/filer.git" "url": "https://github.com/filerjs/filer.git"
}, },
"dependencies": { "dependencies": {
"bower": "~1.3.8", "base64-arraybuffer": "^0.1.5",
"base64-arraybuffer": "^0.1.2",
"minimatch": "^1.0.0" "minimatch": "^1.0.0"
}, },
"devDependencies": { "devDependencies": {
"chai": "~1.9.1", "chai": "^4.1.2",
"grunt": "~0.4.0", "eslint": "^5.0.1",
"grunt-banner": "^0.2.3", "mocha": "^5.2.0",
"grunt-browserify": "^3.8.0", "parcel-bundler": "^1.9.3"
"grunt-bump": "0.0.13",
"grunt-contrib-clean": "~0.4.0",
"grunt-contrib-compress": "~0.4.1",
"grunt-contrib-concat": "~0.1.3",
"grunt-contrib-connect": "^0.10.1",
"grunt-contrib-jshint": "~0.7.1",
"grunt-contrib-uglify": "^0.9.1",
"grunt-contrib-watch": "~0.3.1",
"grunt-git": "0.3.3",
"grunt-npm": "git://github.com/sedge/grunt-npm.git#branchcheck",
"grunt-prompt": "^1.1.0",
"grunt-shell": "~0.7.0",
"habitat": "^1.1.0",
"mocha": "~1.18.2",
"requirejs": "^2.1.14",
"semver": "^2.3.0"
}, },
"main": "./src/index.js" "main": "./src/index.js",
"browser": "./dist/filer.min.js"
} }

View File

@ -1,13 +1,16 @@
<!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Mocha Tests</title> <title>Filer Tests</title>
<link rel="stylesheet" href="../node_modules/mocha/mocha.css" /> <link rel="stylesheet" href="../node_modules/mocha/mocha.css" />
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/mocha/1.21.4/mocha.css" /> </head>
<script src="//cdnjs.cloudflare.com/ajax/libs/mocha/1.21.4/mocha.js"></script> <body>
<script>window.mocha || document.write('<script src="../node_modules/mocha/mocha.js"><\/script>')</script> <div id="mocha"></div>
<script src="//cdnjs.cloudflare.com/ajax/libs/chai/1.9.2/chai.min.js"></script>
<script>window.chai || document.write('<script src="../node_modules/chai/chai.js"><\/script>')</script> <script src="../node_modules/chai/chai.js"></script>
<script src="../node_modules/mocha/mocha.js"></script>
<script> <script>
mocha.setup('bdd').timeout(5000).slow(250);; mocha.setup('bdd').timeout(5000).slow(250);;
@ -16,9 +19,7 @@
mocha.run(); mocha.run();
}; };
</script> </script>
<script src="../dist/filer-test.js"></script> <script src="./index.js"></script>
</head>
<body>
<div id="mocha"></div>
</body> </body>
</html> </html>

View File

@ -27,7 +27,7 @@ describe('fs.stat', function() {
fs.stat('/', function(error, result) { fs.stat('/', function(error, result) {
expect(error).not.to.exist; expect(error).not.to.exist;
expect(result).to.exit; expect(result).to.exist;
expect(result['node']).to.be.a('string'); expect(result['node']).to.be.a('string');
expect(result['dev']).to.equal(fs.name); expect(result['dev']).to.equal(fs.name);