Jump to: navigation, search

Difference between revisions of "Orion/Node/Getting started"

< Orion‎ | Node
(Making sure Orionode can launch npm)
(29 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Orionode is a minimal, single-user server deployment of Orion used for Node development with Orion's editing environment.
+
Orion provides a minimal, single-user server deployment of Orion written in JavaScript that runs on [http://nodejs.org Node.js]. This implementation of Orion supports developing your own Node applications with Orion's editing environment.
  
 
==Features==
 
==Features==
 +
The JavaScript Orion server implementation is still very early access. There are many rough edges and missing features compared to the full Java-based Orion server. The JavaScript-based Orion server currently supports:
 +
 
* Basic Navigator operations (Create file/folder, delete file/folder, copy/move/rename a file)
 
* Basic Navigator operations (Create file/folder, delete file/folder, copy/move/rename a file)
 
* Basic Editor operations (Edit file, save file, ETags)
 
* Basic Editor operations (Edit file, save file, ETags)
 
* Plugin operations (Install/uninstall plugins)
 
* Plugin operations (Install/uninstall plugins)
* Shell command for [[#Developing a node.js application|launching a node app]] (type <code>help node</code> in the Shell page to find out more)
+
* Shell commands for [[#Developing a node.js application|developing Node.js applications]]. Type <code>help node</code> in the Shell page to find out more.
* Shell command for supporting npm. (works the same as the usual <code>npm</code> console command).
+
* Shell command for running the [https://npmjs.org/ npm package manager]. (works the same as the usual <code>npm</code> console command).
 
* Gzip on server traffic to reduce download times
 
* Gzip on server traffic to reduce download times
* [[#Concatenation and Minification|Concatenation and Minification]] of pages (requires a manual step)
+
* Concatenation and minification of pages (requires a manual step)
* Client caching for static HTML+JS content (cache time: 2 hours)
+
  
 
== Requirements ==
 
== Requirements ==
Line 16: Line 17:
  
 
== Getting Orionode and starting it ==
 
== Getting Orionode and starting it ==
You can obtain Orionode through npm (the easiest way) or by checking out its source repo and running it.
+
You can obtain Orionode through npm (the easiest way) or by checking out its source repo and running it. Checking out the source is mainly of interest to developers wishing to work on or extend the Orion node server. For details on this approach see the Orion developer [[Orion/Getting_the_source#Node.js_on_local_computer| wiki page]].
  
 
=== Installing with npm ===
 
=== Installing with npm ===
 
To install Orion with the Node Package Manager (npm), simply run the following command from the shell:
 
To install Orion with the Node Package Manager (npm), simply run the following command from the shell:
# Run this command from a shell:<br><code> npm install orion</code><p>This should install Orionode into a node_modules subdirectory of your working directory.
+
<code> npm install orion</code>
#* If you're not interested in developing the Orionode server, add the <code>--production</code> flag for a slightly smaller download.
+
This will install Orionode into a <code>node_modules</code> subdirectory of your working directory.
 
+
* If you're not interested in developing the Orionode server, add the <code>--production</code> flag for a slightly smaller download.
=== Installing from source ===
+
#[[Orion/Getting_the_source#Getting_the_source_onto_your_computer|Get the Orion source]]. You only need to get the [http://git.eclipse.org/c/orion/org.eclipse.orion.client.git client source].
+
#Open a command shell and change directory to '''org.eclipse.orion.client/modules/orionode'''.
+
#Run the <code>npm install</code> command to automatically download Orionode's dependencies.
+
#*If you're not interested in developing the server, you can instead run <code>npm install --production</code>, which omits the dev-time dependencies for a smaller download.
+
  
 
=== Starting and stopping the server ===
 
=== Starting and stopping the server ===
 
 
# Launch Orion by running:<br><code>npm start orion</code>  
 
# Launch Orion by running:<br><code>npm start orion</code>  
 
#* If you need to pass [[#Server_command_line_arguments|command line arguments]] to the server, run the server.js file directly:<br><code>node node_modules/orion/server.js [arguments]</code>
 
#* If you need to pass [[#Server_command_line_arguments|command line arguments]] to the server, run the server.js file directly:<br><code>node node_modules/orion/server.js [arguments]</code>
Line 36: Line 31:
 
# Stop the server by sending a kill signal from the console (typically Ctrl+C)
 
# Stop the server by sending a kill signal from the console (typically Ctrl+C)
  
=== Other recommended steps ===
+
=== The orion.conf file ===
These are not strictly necessary to run the server, but recommended anyway.
+
You can pass arguments to the server by editing the <code>orion.conf</code> file. It is found in the directory where you installed Orion (when installing from npm, this is typically <code>node_modules/orion/</code>).
  
 
===== Password =====
 
===== Password =====
#Create a one-line "password.txt" file containing a secret password.
+
Add a line in your <code>orion.conf</code> file that looks like this:
#Launch the Orionode server with the <code>-password password.txt</code> argument.
+
  pwd=mysecretpassword
  
You can also provide a password in an <code>orion.conf</code> file by including a line like:<br><code>pwd=mysecretpassword</code>
+
===== Node inspector web port =====
 +
Orion on Node runs a node inspector process with the "--web-port" arguments to avoid conflicting port number with others. The default port number is 8900 but you can change it in the conf file. The port number will be represented in the debug URL link like: yourOrionServer:node_inspector_port/debug?port=yourDebugPort
 +
  node_inspector_port=myPreferredPortNumber
  
===== Making sure Orionode can launch npm =====
+
===== Workspace =====
Orionode lets you use <code>npm</code> commands in the Orion shell to manage the dependencies of a project you're writing. To do this, the server makes a guess about the path where the npm internals (specifically, <code>npm-cli.js</code>) are located on your computer. If you installed a recent version of Node.js, npm should be installed automatically and the guess should work. If you installed npm separately, this guess may be wrong. If you see an error message when launching the server or when you try to run npm commands in the Orion shell, it means you have to specify the path to <code>npm-cli.js</code> yourself:
+
Edit the <code>orion.conf</code> file and change the <code>workspace</code> option to point to a directory in your user space. If not specified, a default <code>.workspace</code> directory will be created in the Orion install directory. For example:
 +
  workspace=/home/pi/Workspace/
 +
 
 +
===== Making sure Orion can launch npm =====
 +
Orion on Node lets you use <code>npm</code> commands in the Orion shell to manage the dependencies of a project you're writing. To do this, the server makes a guess about the path where the npm internals (specifically, <code>npm-cli.js</code>) are located on your computer. If you installed a recent version of Node.js, npm should be installed automatically and the guess should work. If you installed npm separately, this guess may be wrong. If you see an error message when launching the server or when you try to run npm commands in the Orion shell, it means the server failed to guess where npm lives, so you have to specify the path to <code>npm-cli.js</code> yourself:
  
 
#Find out where npm lives on your computer (npm must be in your PATH environment variable for this to work). From a command shell, run:
 
#Find out where npm lives on your computer (npm must be in your PATH environment variable for this to work). From a command shell, run:
Line 58: Line 59:
  
 
== Server command line arguments ==
 
== Server command line arguments ==
All these arguments are optional.
+
When launching the server manually through node.js (<code>node [orion install dir]/server.js</code>), a number of optional arguments can be provided:
 
; <code>-p</code> or <code>-port</code>
 
; <code>-p</code> or <code>-port</code>
 
: The port that the Orion server will listen on. Defaults to 8081.
 
: The port that the Orion server will listen on. Defaults to 8081.
 
; <code>-pwd</code> or <code>-password</code>
 
; <code>-pwd</code> or <code>-password</code>
: Path to a file containing a password. If provided, Orionode will enforce HTTP Basic Authentication with the password (the auth 'User' field is ignored -- Orionode only verifies the password). Use caution: if you don't provide a password file, '''no authentication''' is used (so anyone request can read and write your files!).
+
: Path to a file containing a password. If provided, Orionode will enforce HTTP Basic Authentication with the password (the auth 'User' field is ignored -- Orionode only verifies the password). Use caution: if you don't provide a password file, '''no authentication''' is used (so anyone can access your Orionode server and read and write your files!).  
 
; <code>-w</code> or <code>-workspace</code>
 
; <code>-w</code> or <code>-workspace</code>
: The target directory for reading and writing files. Will be created if it doesn't exist. Defaults to a subdirectory named .workspace in the repository folder.
+
: The target directory for reading and writing files. Will be created if it doesn't exist. Defaults to a subdirectory named <code>.workspace</code> in the server directory. This option can also be set in your [[#The orion.conf file|orion.conf file]].
 
; <code>-dev</code>
 
; <code>-dev</code>
 
: Starts the server in development mode. In this mode, some client-side code is not cached by the browser, to ease development.
 
: Starts the server in development mode. In this mode, some client-side code is not cached by the browser, to ease development.
 
; <code>-log</code>
 
; <code>-log</code>
 
: Logs each request served to standard output.
 
: Logs each request served to standard output.
 +
Arguments passed on the command line override arguments set in the orion.conf file, when both are provided.
  
 
== Developing a node.js application ==
 
== Developing a node.js application ==
Line 77: Line 79:
 
#Use <code>npm install</code> to install your dependency packages if needed. You can use basically all the npm arguments here.
 
#Use <code>npm install</code> to install your dependency packages if needed. You can use basically all the npm arguments here.
 
#Use <code>node start yourApp.js</code> to start your application.
 
#Use <code>node start yourApp.js</code> to start your application.
#Use <code>node list</code> to monitor all the applications you've started and still running.
+
#Use <code>node list</code> to monitor any long-running applications you've started.
#Use <code>node stop PID</code> to stop an application if you want to force it to stop.
+
#Use <code>node stop [PID]</code> to stop an application if you want to force it to stop.
  
 
== Debugging a node.js application ==
 
== Debugging a node.js application ==
Line 86: Line 88:
 
#<code>cd</code> to the folder where your application lives.
 
#<code>cd</code> to the folder where your application lives.
 
#Use <code>node debug yourApp.js givenPort</code> to start your app in debug mode. You can start multiple apps in debug mode by repeating this step.
 
#Use <code>node debug yourApp.js givenPort</code> to start your app in debug mode. You can start multiple apps in debug mode by repeating this step.
#In the return value of the <code>node debug</code> command, you will see a "debugURL" string.
+
#In the return value of the <code>node debug</code> command, you will see a "Debug URL", which you can click to start debugging your app.
#Copy and paste the debug URL into a webkit browser (e.g., Chrome, Safari) and start debugging. The URL normally looks something like: <code>http://yourOrionNodeServer:8900/debug?port=theGivenPort</code>.
+
  
== Concatenation and Minification ==
+
The debug interface currently only works with Webkit browsers (Chrome, Safari).
By default the pages served up by Orionode are not concatenated or minified, so they will load rather slowly. You can mitigate this by running the client-side build. To do this, just run <code>build.js</code>, found in the <code>org.eclipse.orion.client/modules/orionode/build</code> directory:
+
  node ./build/build.js
+
{{warning| Running the script will overwrite files in your working directory! Make sure anything important is committed to a branch first.}}
+
 
+
Clear your browser cache. The next time you load Orionode, it should be much faster.
+
  
 
== Other ways of using Orionode ==
 
== Other ways of using Orionode ==
Line 105: Line 101:
 
#Select the '''Plugins''' category, click '''Install''', paste in the URL, click '''Submit'''.
 
#Select the '''Plugins''' category, click '''Install''', paste in the URL, click '''Submit'''.
 
#Return to the Navigator page. Your Orionode files should appear as a new filesystem in the left-hand sidebar.
 
#Return to the Navigator page. Your Orionode files should appear as a new filesystem in the left-hand sidebar.
 
== Unit tests ==
 
Our unit tests are written against the [http://visionmedia.github.com/mocha/ Mocha] test framework.
 
 
=== Running the tests ===
 
From the <code>org.eclipse.orion.client/modules/orionode</code> directory, just run the command:
 
  npm test
 
 
This will invoke Mocha and produce console output showing which tests passed and failed.
 
 
If you want to pass custom arguments to Mocha, you'll need to invoke it explicitly like this:
 
  ./node_modules/mocha/bin/mocha [debug] [options] [files]
 
 
To make this easier, you can install Mocha as a global npm package (<code>npm install mocha -g</code>), and then invoke it as simply <code>mocha</code> from a command shell.
 
 
=== Writing more tests ===
 
When you're prototyping a new feature, writing unit tests for it is always a good idea. Here's how to write a test:
 
# Create a new file <code>my_tests.js</code> in the <code>org.eclipse.orion.client/modules/orionode/test/</code> directory.
 
# Write your tests in the file. Here are two resources to help you get started:
 
#* [http://visionmedia.github.com/mocha/ Mocha reference]: the general structure of a test.
 
#* [http://visionmedia.github.com/superagent/ Superagent reference]: how to write concise assertions for testing HTTP.
 
# [[# Running the tests|Run the tests]].
 
#* You don't have to register your new tests with the framework; it will discover anything in the <code>test/</code> directory automatically.
 
 
Helper data or classes should go in <code>test/support/</code>.
 
  
 
== Security Concerns ==
 
== Security Concerns ==
Line 137: Line 108:
 
* See the [https://bugs.eclipse.org/bugs/buglist.cgi?list_id=4064489&classification=Eclipse&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&component=Node&product=Orion list of open bugs].
 
* See the [https://bugs.eclipse.org/bugs/buglist.cgi?list_id=4064489&classification=Eclipse&query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&component=Node&product=Orion list of open bugs].
 
* There is no way to provide standard input to a running Node.js app.
 
* There is no way to provide standard input to a running Node.js app.
* No source control integration yet. E.g.: Git support.
+
* There is no source control integration yet. E.g.: Git support.
 +
 
 +
== See also ==
 +
* [[Orion/Node/Developing|Developing the Node server]]
  
[[Category:Orion|Getting Started with Orion node]]
+
[[Category:Orion|N]]
 +
[[Category:Orion/Node|G]]

Revision as of 14:28, 30 October 2013

Orion provides a minimal, single-user server deployment of Orion written in JavaScript that runs on Node.js. This implementation of Orion supports developing your own Node applications with Orion's editing environment.

Features

The JavaScript Orion server implementation is still very early access. There are many rough edges and missing features compared to the full Java-based Orion server. The JavaScript-based Orion server currently supports:

  • Basic Navigator operations (Create file/folder, delete file/folder, copy/move/rename a file)
  • Basic Editor operations (Edit file, save file, ETags)
  • Plugin operations (Install/uninstall plugins)
  • Shell commands for developing Node.js applications. Type help node in the Shell page to find out more.
  • Shell command for running the npm package manager. (works the same as the usual npm console command).
  • Gzip on server traffic to reduce download times
  • Concatenation and minification of pages (requires a manual step)

Requirements

  • Node.js and npm.
  • A modern web browser with Web Socket support (for example: Firefox 15, Chrome 22, Internet Explorer 10, Safari 6).

Getting Orionode and starting it

You can obtain Orionode through npm (the easiest way) or by checking out its source repo and running it. Checking out the source is mainly of interest to developers wishing to work on or extend the Orion node server. For details on this approach see the Orion developer wiki page.

Installing with npm

To install Orion with the Node Package Manager (npm), simply run the following command from the shell: npm install orion This will install Orionode into a node_modules subdirectory of your working directory.

  • If you're not interested in developing the Orionode server, add the --production flag for a slightly smaller download.

Starting and stopping the server

  1. Launch Orion by running:
    npm start orion
    • If you need to pass command line arguments to the server, run the server.js file directly:
      node node_modules/orion/server.js [arguments]
  2. Go to http://localhost:8081 (or whatever port you provided in the server arguments) in your web browser to start using Orionode.
  3. Stop the server by sending a kill signal from the console (typically Ctrl+C)

The orion.conf file

You can pass arguments to the server by editing the orion.conf file. It is found in the directory where you installed Orion (when installing from npm, this is typically node_modules/orion/).

Password

Add a line in your orion.conf file that looks like this:

 pwd=mysecretpassword
Node inspector web port

Orion on Node runs a node inspector process with the "--web-port" arguments to avoid conflicting port number with others. The default port number is 8900 but you can change it in the conf file. The port number will be represented in the debug URL link like: yourOrionServer:node_inspector_port/debug?port=yourDebugPort

 node_inspector_port=myPreferredPortNumber
Workspace

Edit the orion.conf file and change the workspace option to point to a directory in your user space. If not specified, a default .workspace directory will be created in the Orion install directory. For example:

 workspace=/home/pi/Workspace/
Making sure Orion can launch npm

Orion on Node lets you use npm commands in the Orion shell to manage the dependencies of a project you're writing. To do this, the server makes a guess about the path where the npm internals (specifically, npm-cli.js) are located on your computer. If you installed a recent version of Node.js, npm should be installed automatically and the guess should work. If you installed npm separately, this guess may be wrong. If you see an error message when launching the server or when you try to run npm commands in the Orion shell, it means the server failed to guess where npm lives, so you have to specify the path to npm-cli.js yourself:

  1. Find out where npm lives on your computer (npm must be in your PATH environment variable for this to work). From a command shell, run:
    • On Windows: where npm
    • On Mac OS/Linux: which npm
    • The returned path will be a shell script (or a symbolic link to a script) that launches npm-cli.js. The path to npm-cli.js is what we need. Open up the script in a text editor, and copy the path of npm-cli.js.
  2. In the server directory, open the orion.conf file. You'll find a npm_path option (by default its value is empty).
  3. Set the value of npm_path option equal to the path to npm-cli.js.
    • You can provide the path as an absolute path, or a path relative to your node executable.
  4. Start or restart the server. If you do not see any "npm" errors printed to the console, your npm path is set properly.

Server command line arguments

When launching the server manually through node.js (node [orion install dir]/server.js), a number of optional arguments can be provided:

-p or -port
The port that the Orion server will listen on. Defaults to 8081.
-pwd or -password
Path to a file containing a password. If provided, Orionode will enforce HTTP Basic Authentication with the password (the auth 'User' field is ignored -- Orionode only verifies the password). Use caution: if you don't provide a password file, no authentication is used (so anyone can access your Orionode server and read and write your files!).
-w or -workspace
The target directory for reading and writing files. Will be created if it doesn't exist. Defaults to a subdirectory named .workspace in the server directory. This option can also be set in your orion.conf file.
-dev
Starts the server in development mode. In this mode, some client-side code is not cached by the browser, to ease development.
-log
Logs each request served to standard output.

Arguments passed on the command line override arguments set in the orion.conf file, when both are provided.

Developing a node.js application

Now in the browser you can start to develop your node.js applications. Orionode uses largely the UI you're accustomed to from Orion. (Refer to Orion user guide for basic instructions). Please note that the Sites and Git pages are not available in Orionode. Here is a typical workflow:

  1. Use the Navigator and Edit pages to create and edit your folders and node applications.
  2. Go to the Shell page.
  3. cd to the folder where your application lives.
  4. Use npm install to install your dependency packages if needed. You can use basically all the npm arguments here.
  5. Use node start yourApp.js to start your application.
  6. Use node list to monitor any long-running applications you've started.
  7. Use node stop [PID] to stop an application if you want to force it to stop.

Debugging a node.js application

You can use Orionode to debug your node.js application. If you have existing node.js applications, make sure the code is under a subfolder of the workspace (path provided by the -w option when you start Orionnode). This will give you easy access to your node.js apps from within Orionode. You can also create a new node.js application in your workspace.

  1. After Orionode starts, open the shell page and use help to see what commands are available.
  2. cd to the folder where your application lives.
  3. Use node debug yourApp.js givenPort to start your app in debug mode. You can start multiple apps in debug mode by repeating this step.
  4. In the return value of the node debug command, you will see a "Debug URL", which you can click to start debugging your app.

The debug interface currently only works with Webkit browsers (Chrome, Safari).

Other ways of using Orionode

You can use Orionode as a file server, to access your local files from http://www.orionhub.org/ (or any other Orion installation). All you need is Orionode and a publicly-accessible URL pointing to your local Orionode server.

  1. Visit this page on your Orionode server (the hostname will differ from this example) and copy its URL:http://yourOrionNodeServer:8081/plugins/fileClientPlugin.html
  2. Log in to Orionhub.
  3. Click the user menu in the top right-hand corner of the page, then click Settings.
  4. Select the Plugins category, click Install, paste in the URL, click Submit.
  5. Return to the Navigator page. Your Orionode files should appear as a new filesystem in the left-hand sidebar.

Security Concerns

No security is guaranteed or even implied at this moment. Always run Orionode with the -pwd flag to prevent unauthorized access to your files.

Known Issues

  • See the list of open bugs.
  • There is no way to provide standard input to a running Node.js app.
  • There is no source control integration yet. E.g.: Git support.

See also