I want to use the following npm package https://www.npmjs.com/package/poker-evaluator
It can also be found on github: github.com/chenosaurus/poker-evaluator
On the project folder I ran the following command line, npm install poker-evaluator --save
And it seems that I installed the library -> Package Json
I want to be able to run the functions from this module(poker-evaluator) and I can't insert this module.
tried multiple times and in different ways ...
Unfortunately, the package you are looking at relies on NodeJS APIs, so it cannot be used in the browser. If you look at its source, you'll see: https://github.com/chenosaurus/poker-evaluator/blob/master/lib/PokerEvaluator.js#L1
var fs = require("fs");
var path = require("path");
These are Node APIs that work with files. You'll have to use this package on your server and wrap it with an API that your Aurelia application will talk to.
Related
I have a server running, I want to get the local system file path where aws server is running using node js
Use process.cwd() which is also documented here: https://nodejs.org/api/process.html
This might solve your problem:
__dirname
Check with a console log whether it's what you wanted or not.
There are multiple ways of achieving this. One of them is you can use this package,
app-root-path
Install the package with the command :
npm i -S app-root-path //install the package
Use package where you required :
var appRoot = require('app-root-path'); //require package
console.log(appRoot); //use variable as string
You can import the package and use variable where ever you require inside the app.
You can check this package documentation visiting this link.
I installed bower from NPM and then i installed a bower package Crypto-js.
Is it possible to use this package in my node js code by simply writing require
Like this
var crypt= require('./package path/md5');
var hash= crypt.MD5('Message');
console.log(hash.toString(crypt.enc.Base64));
Here my point is not about only this library, i want to ask if this is the way to use bower package in nodejs or is there any other way to use bower package in nodejs?
bower is for front-end and it is not exported for node.js
you should use npm package https://www.npmjs.com/package/crypto-js instead
There are two things
bower is package for web build by twitter
and as you already aware that nodejs is server side
So you can't use bower in nodejs server-side application.
And even if you use bower in front end, it's done by using script tags.
for more refer this blog
What is the best way of sharing code between frontend and backend using javascript, specifically saying between nodejs and angularjs?
Thing is that we are using same enums and constant values such as error codes in both backend and frontend. Right now we just copy&paste each change to both platform which isn't a good solution. There are also some services that could be shared.
I have seen libraries such as browserify; but thats not exactly what I am looking for. I am looking for a solution similar to maven dependency in java. In java, libraries can be shared easily using maven, whereas I can't find a similar way of doing that in javascript.
Is there a way to isolate these services and give them as dependency to nodejs using npm and to angularjs using bower independently? Or what are the ways for sharing the same code between frontend and backend?
There are several ways to do this. The first is that you can make a new package which is required via bower for the front-end code and via npm for the backend code. I have several packages published to both systems.
Install with Bower -- information on how to install modules that aren't in the registry
NPM Install docs -- all the ways to install with npm (private github with auth: git+ssh://git#github.com/[org]/[repo])
Just create a new module with your shared data and install it using both package managers. Both of them allow you to install an unpublished module so if it's private data you can keep it as such.
If your front end requires require.js you can use something like amdefine to make it available to your node backend, or if you're just using legacy window code you can do something like:
var mydata = {};
if(typeof window !== 'undefined'){
window.mydata = mydata;
} else {
module.exports = mydata;
}
If you are sharing a lot of data though I highly recommend looking into browserify to write your entire codebase in commonjs and using browserify to generate your client bundle. There is a laundry list of resources about using browserify, including stuff on how to use browserify and angular together
Disclaimer - I'm still developing this approach and it's a little manual.
I did this using npm, an npm cli called pac, and bower. Pac let's me avoid using npm install in production by keeping the modules as .tgz files (committed to project in source control). With pac, when someone checks out the node project, they run pac install then npm rebuild instead of npm install.
My shared code is kept in a directory (my-module). It has both package.json and a bower.json.
My consuming node app has a package.json dependency for:
"my-module" : "x.y.z"
My consuming client has a bower.json dependency for:
"my-module" : "../relative/path/to/my-module"
When I make updates to my-module, I update my node app by:
Making a tar.gz of the contents of my-module:
tar -czvf my-module.tar.gz -C my-module
Removing the old version from the node app's node_modules
Rerunning npm install path/to/my-module-tar.gz
Rerunning pac (this makes a .tgz of node_modules/my-module)
Committing the updated pac .modules/my-module.tgz
I update my client by:
Removing the old client/bower_components/my-module
Rerunning bower install or bower update
I have been trying to use the Npm.require to get the ldapjs module and use it for client authentication, however I am getting the following message.
var ldap = Npm.require('ldapjs');
Error: Cannot find module 'ldapjs'
Isn't the require supposed to download the package from the npm?
Currently the best way to use NPM packages in Meteor is this npm smart package. The instructions on how to use it are pretty clear there. Basically, you do three things:
1) Install npm:
mrt add npm
2) Create packages.json file with list of required packages:
{
"ldapjs": "0.6.3"
}
3) Use the package via Meteor.require:
var ldapjs = Meteor.require('ldapjs');
Nope, it is not. Meteor will only download a node module as long as it is declared within a smart package, with Npm.depends({...}) directive. If your code is not a part of some smart package, then you'll need to install the node module manually.
You need two things to use npm modules in Meteor packages:
Npm.depends - specify the modules you want to use, with versions. Meteor's build system will download the package and manage its dependencies
Npm.require - pull in a module, making it available in the current scope
Note that you need to write a package to use an npm module. You'll probably want to read through the Meteor docs on packages.
For an example, check out the logging package in Meteor. Its package.js specifies a depency on the npm module cli-color, and its logging.js file requires and uses the module.
node modules in the main application
What if you want to use npm from the main application? And what if you don't want to install node modules manually (a maintenance headache)?
This is possible with a workaround. Create a shim smart package to provide the node modules for the main application. Export the modules to the main application.
The exact steps
1. Create a directory npm-shim outside your Meteor application. We will use it in step 3.
2. Add these two files to it:
File package.js
// npm dependencies are only available for packages. If you have npm
// dependencies for the main application, you need this workaround:
// Create a shim package to provide the npm dependencies to the main app.
Package.describe({
summary: "Meteor main application npm dependencies"
});
Npm.depends({
colors: '0.6.2',
// Add more modules as needed.
});
Package.on_use(function(api) {
api.export("NpmShim"); // Omit this for versions before 0.6.5
api.add_files("npm.js", "server");
});
File npm.js
NpmShim = {};
NpmShim.colors = Npm.require('colors');
// Add more modules as needed.
3. Edit smart.json and add this line:
"npm-shim": { "path": <path to the directory created in step 1> },
4. Execute mrt update then meteor add npm-shim.
The result of this workaround
Node modules can be used from the Meteor main application without the need to manually install them. Use NpmShim.colors instead of Npm.require('colors').
If you need more modules, you have to add them to package.js and npm.js (see comment // Add more modules as needed).
How do we or can we use node modules via npm with Meteor?
Or is that something that will be dependent on the packaging API?
Or is there a prescribed method that is recommended?
Meteor 1.3, released on March 28, 2016, gives apps full ES6 (ES2015) modules support and out of the box NPM support. Apps and packages can now load NPM modules directly and easily on the client and on the server.
If you can use 1.3, then check http://guide.meteor.com/using-packages.html#installing-npm.
For example, to use moment.js:
meteor npm install --save moment
Then in your code:
import moment from 'moment';
// this is equivalent to the standard node require:
const moment = require('moment');
If you need to use an older version of Meteor, read the rest of the answer below.
Pre-Meteor 1.3:
Since v0.6.0, Meteor integrates directly with NPM modules with the help of a 3rd party package. For example, to use a module like ws,
Run sudo npm install -g ws (or for local installs, see this)
In your sever JavaScript file,
var Websocket = Npm.require('ws');
var myws = new Websocket('url');
To use a core Node module, just make the corresponding Npm.require() call, e.g. var Readable = Npm.require('stream').Readable.
You can use any of the more than 230,000 NPM modules directly with Meteor thanks to the NPM package developed by Arunoda.
You can also define dependencies on Npm packages from smart packages - from the initial announcement of npm support:
Your smart package can now define dependencies directly, by adding a call to Npm.depends in package.js:
Npm.depends({
"awssum": "0.12.2",
"underscore.string": "2.3.1"
});
All of this works well with hot code reload, just like the rest of Meteor. When you make changes, the bundler will automatically download missing npm packages and re-pin its dependencies.
To use an NPM module within server code, use Npm.require as you would normally use plain require. Notably, __meteor_bootstrap__.require has been eliminated and all of its uses have been converted to Npm.require.
There is a small example of using an NPM module in your application.
Note that this answer applies to versions of Meteor prior to 0.6.0, which was released in April 2013 and added direct npm integration
Install modules as you normally would through npm and then use
var require = __meteor_bootstrap__.require,
pd = require("pd"),
after = require("after") // etc
Load any modules you want
I did a complete write-up on this on Meteorpedia:
http://www.meteorpedia.com/read/npm
The article covers how to use npm in both your app and/or packages, and common patterns for wrapping regular callbacks and event emmitter callbacks to work properly in Meteor and Fibers, and include's references to Arunoda's async-utilities and additional resources.
You could use the Meteor Npm package
meteor add meteorhacks:npm
Then create a packages.json file in your project's root directory with the NPM module's info.
{
"redis": "0.8.2",
"github": "0.1.8"
}
Then as simple as (server side)
var github = Meteor.npmRequire("github");
var redis = Meteor.npmRequire("redis");
So you just use Meteor.npmRequire instead of require
I wrote a Gist on how to do this as of Meteor 0.6.5, How to add Node.js npms to your Meteor.js project.
I am using such a script which nicely install all Node.js dependencies. It behaves similar to the official support in the Meteor engine branch (it installs dependencies at runtime), but it also supports installing from Git repositories and similar goodies.