install the latest nodejs (if you haven't already) nodejs
update npm to latest version
npm install npm@latest -g
first, use the VSCode terminal (or your favorite command line tool), then use the following command to go into the root of the project:
cd /YOUR_REPOSITORIES_PATH/web-audio-api-player
then use the follwing command (in the root of this repository) to build the "web-audio-api-player" itself:
npm run build
Note: for more instructions about the web-audio-api-player itself check out the web-audio-api-player README
then, build the example (server & client) itself...
go into the client folder
cd /examples/simple-player/client
install the client dependencies
npm i
build the client
npm run build
go into the server folder
cd /examples/simple-player/server
install the server dependencies
npm i
build the server
npm run build
start the server
npm run start
open the project in your browser:
http://127.0.0.1:35000/
the linting is now done via the npm run lint command of the main project
Because the value of the input type range element gets constantly updated by the player itself, when using an event listener on change will result in the event not firing at all (chrome only?) or it will fire but then at the moment when you read the value it will already have been updated by the player
this is why I recommend using the input event instead (which is what is used in this example), so far I had none of the problems I just mentioned using the "input" event instead of the "change" event
Full nodejs support for es6 modules import/export syntax enabled
nodejs modules official documentation:
nodejs ecmascript modules readme nodejs ecmascript modules documentation
besides adding type=module to the package.json and using the nodejs flag --experimental-modules, it's important to also use the flag --es-module-specifier-resolution=node if you want to be able to load es modules exactly how you would do in the browser:
extensionless loading of es modules / files explanation
so my command (in package.json) to run start the server in nodejs looks like this:
node --experimental-modules --es-module-specifier-resolution=node ./build/index
and in package.json you will notice that I also added:
{
"type": "module"
}
When using es modules (esm), the __dirname environment variable is not available anymore, as it is for commonjs (cjs) only, however a replacement is available: meta.import.url
However as of now (25.05.2019) typescript will tell you that "Property 'url' does not exist on type 'ImportMeta'.ts(2339)", the DefinitelyTyped ticket is still unresolved:
OPEN definitly typed ticket "import.meta object is incompletely defined"
To fix this, add the following Interface to your code:
declare global {
interface ImportMeta {
url: string;
}
}