Unable to run appjs sample app using node.js

2.5k Views Asked by At

I am trying to run one of the sample projects using appjs which is present over here https://github.com/appjs/appjs/tree/master/examples. I am using the latest version of node.js (v4.1.0 ) on Windows (64 bit machine)

When I try and run the example using the below command on Command Prompt

node --harmony index.js

I get an error as follows,

Error: AppJS requires Node is run with the --harmony command line flag
at Object.<anonymous> (F:\programs\appjs_examples\node_modules\appjs\lib\ind
ex.js:2:9)
at Module._compile (module.js:434:26)
at Object.Module._extensions..js (module.js:452:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (F:\programs\appjs_examples\octosocial\index.js:1:73)
at Module._compile (module.js:434:26)
at Object.Module._extensions..js (module.js:452:10)

I tried searching for this issue but I couldn't find a solution. Can anyone tell me how to use node.js with the harmony flag?

UPDATE My index.js looks like this

var app = require('appjs'),
github = new (require('github'))({ version: '3.0.0' }),
KEY_F12 = process.platform === 'darwin' ? 63247 : 123;

app.serveFilesFrom(__dirname + '/assets');

var window = app.createWindow({
 width: 460,
  height: 640,
 resizable: false,
  disableSecurity: true,
  icons: __dirname + '/assets/icons'
 });

  window.on('create', function(){
   window.frame.show();
   window.frame.center();
   });

 window.on('ready', function(){
   var $ = window.$,
  $username = $('input[name=username]'),
  $password = $('input[name=password]'),
  $info = $('#info-login'),
  $label = $info.find('span'),
  $buttons = $('input, button');

 $(window).on('keydown', function(e){
  if (e.keyCode === KEY_F12) {
    window.frame.openDevTools();
  }
});

 $username.focus();

 $('#login-form').submit(function(e){
e.preventDefault();

$info.removeClass('error').addClass('success');
$label.text('Logging in...');
$buttons.attr('disabled', true);

  github.authenticate({
    type: 'basic',
   username: $username.val(),
  password: $password.val()
   });

github.user.get({}, function(err, result) {
  if (err) {
    $info.removeClass('success').addClass('error');
    $label.text('Login Failed. Try Again.');
    $buttons.removeAttr('disabled');
  } else {
    loggedIn(result);
  }
  });
});

 function loggedIn(result){
    $label.text('Logged in!');
    $('#user-avatar').append('<img src="'+result.avatar_url+'" width="64" height="64">');
   $('#user-name').text(result.name);
    $('#login-section').hide();
    $('#profile-section').show();
    ['Followers', 'Following'].forEach(function(type){
      github.user['get'+type]({ user: result.login }, populate.bind(null,     type.toLowerCase()));
});
}

Now with v0.12 of Node.js I get below error

    F:\softwares\Node.js_v0.12\node_modules\appjs\lib\index.js:2
throw new Error ('AppJS requires Node is run with the --harmony command line
  Error: AppJS requires Node is run with the --harmony command line flag
  at Object.<anonymous> (F:\softwares\Node.js_v0.12\node_modules\appjs\lib\ind
ex.js:2:9)
   at Module._compile (module.js:460:26)
   at Object.Module._extensions..js (module.js:478:10)
   at Module.load (module.js:355:32)
   at Function.Module._load (module.js:310:12)
   at Module.require (module.js:365:17)
   at require (module.js:384:17)
   at Object.<anonymous> (F:\softwares\Node.js_v0.12\index.js:1:73)
   at Module._compile (module.js:460:26)
   at Object.Module._extensions..js (module.js:478:10)
1

There are 1 best solutions below

11
technicallyjosh On

Just tested your code out locally with node v0.12.7 and v4.0.0. Looks like the node_modules/appjs/lib/index.js check makes sure that proxy is enabled no matter what.

By default the --harmony flag does not enable proxies. However you can use --harmony_proxies.

To help you understand what is happening:

  1. Open node in your terminal, Then type Proxy. You will get 'Proxy is not defined'.

  2. Now, open node --harmony in your terminal and do the same. You will get the same output.

  3. Now, with node --harmony-proxies. Bam, you get an empty object.

You should be able to run this with v4.x.x however, you will still need the proxies flag for harmony.

When the merge happened with node.js and io.js for v4 they released a page of ES6 features that are shipped if you are using 4.x.x. https://nodejs.org/en/docs/es6/

https://github.com/appjs/appjs is deprecated btw, but once you pass the module's test of features, it will require 32bit ;)

Edit:

To properly run your app use the following:

node --harmony-proxies index.js

Here is a screenshot to show the expected output from step 3 above. enter image description here