Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kung Fu Moves for Front-End Hero

Kung Fu Moves for Front-End Hero

Presented at NationJS, Dec 1 2017 in Washington, DC.

Ariya Hidayat

December 01, 2017
Tweet

More Decks by Ariya Hidayat

Other Decks in Programming

Transcript

  1. You either die a JavaScript hero, or you live long

    enough to read those JavaScript fatigue articles.
  2. > npm start > [email protected] start /home/ariya/from-hero-to-zero > http-server -p

    9000 Starting up http-server, serving ./ Available on: http://127.0.0.1:9000 http://192.168.1.69:9000 Hit CTRL-C to stop the server
  3. git commit Run pre-commit hook Exit code = 0 ?

    Continue Abort the commit process Y N
  4. git push Run pre-push hook Exit code = 0 ?

    Continue Abort the push process Y N
  5. cat << EOF >> .git/hooks/pre-commit npm run jscs EOF Create

    a pre-commit hook script chmod +x .git/hooks/pre-commit Ensure that it is executable
  6. > git commit -a -m "Fix bug #666" > [email protected]

    jscs /home/ariya/from-hero-to-zero > jscs -p idiomatic js/*.js Invalid quote mark found at js/todoModel.js : 1 |var app = app || {}; 2 |(function() { 3 | 'use strict'; ------------^ 4 | var Utils = app.Utils; 5 | // Generic "model" object. You can use whatever 1 code style error found.
  7. > cr -f plain search.js search.js Function: searchConsultant Line No.:

    1 Physical LOC: 17 Logical LOC: 13 Parameter count: 0 Cyclomatic complexity: 6 Cyclomatic complexity density: 46.15384615384615% Halstead difficulty: 15.235294117647058 Halstead volume: 371.5647232790157 Halstead effort: 5660.897842897945
  8. Karma configuration module.exports = function(config) { config.set({ basePath: '..', autoWatch:

    true, frameworks: ['mocha', 'chai'], files: ['js/*.js', 'test/*.js' ], plugins: [ 'karma-mocha', 'karma-chai', 'karma-coverage', 'karma-phantomjs-launcher'], browsers: ['PhantomJS'], singleRun: true, preprocessors: { 'js/*.js': ['coverage'] }, reporters: ['progress', 'coverage'], coverageReporter: { dir : 'coverage/', reporters: [{ type: 'html', subdir: 'html' },] } }); };
  9. appveyor.yml install: - choco install firefox - choco upgrade firefox

    - choco install googlechrome - choco upgrade googlechrome - ps: Install-Product node $env:nodejs_version - node --version - npm --version - npm install test_script: - npm test
  10. Running Install scripts choco install firefox Installing the following packages:

    firefox By installing you accept licenses for the packages. Firefox v41.0.2 already installed. Use --force to reinstall, specify a version to install, or try upgrade. Chocolatey installed 0/1 package(s). 0 package(s) failed.
  11. Running Install scripts choco install firefox Installing the following packages:

    firefox By installing you accept licenses for the packages. Firefox v41.0.2 already installed. Use --force to reinstall, specify a version to install, or try upgrade. Chocolatey installed 0/1 package(s). 0 package(s) failed. choco upgrade firefox Upgrading the following packages: firefox By upgrading you accept licenses for the packages. You have Firefox v41.0.2 installed. Version 44.0.2 is available based on your source(s). Firefox v44.0.2 Downloading Firefox 32 bit Installing Firefox... Firefox has been installed. The upgrade of firefox was successful.
  12. function test_downstream_project(project, repo) { console.log('Cloning', repo, '...'); execute('git clone --depth

    1 ' + repo + ' ' + project); process.chdir(project); console.log(); execute('npm install'); console.log(); console.log('Replacing awesome with a fresh one...'); copy_file(source, './node_modules/awesome/awesome.js'); console.log(); try { execute('npm test'); } catch (e) { console.log('Failing: ', e.toString()); process.exit(1); } process.chdir('..'); }
  13. function test_downstream_project(project, repo) { console.log('Cloning', repo, '...'); execute('git clone --depth

    1 ' + repo + ' ' + project); process.chdir(project); console.log(); execute('npm install'); console.log(); console.log('Replacing awesome with a fresh one...'); copy_file(source, './node_modules/awesome/awesome.js'); console.log(); try { execute('npm test'); } catch (e) { console.log('Failing: ', e.toString()); process.exit(1); } process.chdir('..'); } Clone a downstream project Replace the library with a fresh one Install dependencies Run the test suite