NAME
Module::JSAN - Build JavaScript distributions for JSAN
VERSION
Version 0.01
SYNOPSIS
In Build.PL:
use inc::Module::JSAN;
name 'Digest.MD5';
version '0.01';
author 'SamuraiJack <root@symbie.org>';
abstract 'JavaScript implementation of MD5 hashing algorithm';
license 'perl';
requires 'Cool.JS.Lib' => '1.1';
requires 'Another.Cool.JS.Lib' => '1.2';
docs_markup 'mmd';
WriteAll;
or more relaxed DSL syntax:
use inc::Module::JSAN::DSL;
name Digest.MD5
version 0.01
author 'SamuraiJack <root@symbie.org>'
abstract 'JavaScript implementation of MD5 hashing algorithm'
license perl
requires Cool.JS.Lib 1.1
requires Another.Cool.JS.Lib 1.2
docs_markup mmd
To build, test and install a distribution:
% perl Build.PL
% ./Build
% ./Build test
% ./Build install
DESCRIPTION
JSAN is the "JavaScript Archive Network," a JavaScript library akin to CPAN. Visit http://www.openjsan.org/ for details. This module is a developer aid for creating JSAN distributions.
This module works as simple wrapper for Module::Build::JSAN::Installable, please also refer to its documentation for additional details. The difference is that this module provides a less perl-specifiec and more relaxed syntax for builder scripts.
WRITING A JSAN MODULE
This is a short tutorial on writing a simple JSAN module. Its really not that hard (tm).
The Layout
The basic files in a module look something like this.
Build.PL
lib/Your/Module.js
See the synopsys above for the sample content of Build.PL. That's all that's strictly necessary. There's additional files you'll need to publish your module on JSAN, most of them can be generated automatically, with the help of this module.
More advanced layout will look like:
lib/Your/Other/Module.js
t/01_some_test.t.js
t/02_some_other_test.t.js
Changes
README
INSTALL
MANIFEST
MANIFEST.SKIP
Below is the explanation of each item in the layout.
- Build.PL
-
When you run Build.PL, it creates a 'Build' script. That's the whole point of Build.PL.
perl Build.PL
The 'Build' is a simple, cross-platform perl script, which loads Module::Build::JSAN::Installable and couple of another modules to manage the distribution.
Here's an example of what you need for a very simple module:
use inc::Module::JSAN; name 'Your.Module'; version 0.01;
'name' directive indentifies the name of your distribution and 'version' - its version. Pretty simple. Name and version is the only metadata which is strictly required to publish your module. For other pieces of metadata which can be specified, please refer to more in-depth tutorial: Module::JSAN::Tutorial.
'Build' script accepts arguments on command line. The 1st argument is called - action. Other arguments are various for different actions. Example of calling 'doc' action:
./Build doc
or on Windows
Build doc
- MANIFEST
-
Manifest is a simple listing of all the files in your distribution.
Build.PL MANIFEST lib/Your/Module.js
Filepaths in a MANIFEST always use Unix conventions (ie. /) even if you're not on Unix.
You can write this by hand or generate it with 'manifest' action.
./Build manifest
- lib/
-
This is the directory where your *.js files you wish to have installed go. They are layed out according to namespace. So Foo.Bar is lib/Foo/Bar.js.
- t/
-
Tests for your modules go here. Each test filename ends with a .t.js.
Automated testing is not yet implemented. Please refer to documentation of various testing tools on JSAN, which allows to run the test suite semi-automatically. Examples: http://openjsan.org/go?l=Test.Run or http://openjsan.org/go?l=Test.Simple.
- Changes
-
A log of changes you've made to this module. The layout is free-form. Here's an example:
1.01 Fri Apr 11 00:21:25 PDT 2003 - thing() does some stuff now - fixed the wiggy bug in withit() 1.00 Mon Apr 7 00:57:15 PDT 2003 - "Rain of Frogs" now supported
- README
-
A short description of your module, what it does, why someone would use it and its limitations. JSAN automatically pulls your README file out of the archive and makes it available to JSAN users, it is the first thing they will read to decide if your module is right for them.
- INSTALL
-
Instructions on how to install your module along with any dependencies. Suggested information to include here:
any extra modules required for use the required javascript engine required operating systems/browser
- MANIFEST.SKIP
-
A file full of regular expressions to exclude when using './Build manifest' to generate the MANIFEST. These regular expressions are checked against each full filepath found in the distribution (so you're matching against "t/foo.t" not "foo.t").
Here's a sample:
~$ # ignore emacs and vim backup files .bak$ # ignore manual backups \b\.svn\b # ignore all SVN directories ^\.git\b # ignore top-level .git directory
Since # can be used for comments, # must be escaped.
Module::JSAN comes with a default MANIFEST.SKIP to avoid things like version control directories and backup files. You can alter it as necessary.
The Documentation
The work isn't over until the paperwork is done, and you're going to need to put in some time writing some documentation for your module. JSAN module can be documented in several markup languages, notably in
- POD
-
Plain Old Documentation. Authors with perl background may prefere this markup language, as its native to perl
- Markdown
-
Very convenient markup language, with main focus on documents readability. Markdown documents can be published as-is, as plain text, without looking like it's been marked up with tags or formatting instructions.
- MultiMarkdown
-
Further extension of Markdown with ability to specify some metadata for documents.
http://fletcherpenney.net/multimarkdown/users_guide/multimarkdown_syntax_guide/
if you're not sure about the format, check the links and choose the most appropriate for you. Put the documentation in JavaScript comments, which starts at line begining with double star:
/**
Name
====
Your.Module - A new and shining JSAN module
SYNOPSIS
========
var instance = new Your.Module({
foo : 'bar',
bar : 'var'
var : 'baz'
})
instance.saveMyDay()
DESCRIPTION
===========
Your.Module is very useful module, which do a single task, and do it good.
*/
parser will found such comments and extract the documentation from them. Pod documentation can be put in the usual comments.
Provide a good synopsis of how your module is used in code, a description, and then notes on the syntax and function of the individual subroutines or methods. Use comments for developer notes and documentation for end-user notes.
The Tarball
Once you have all the preparations done and documentation written, its time to create a release tarball. Execute 'dist' action of the 'Build' script:
./Build dist
Perhaps you'll need to specify paths to gzip and tar archivers on your system:
./Build dist --gzip=gzip --tar=tar
% Deleting META.json
% Creating META.json
% Creating Task.Joose.Stable-3.04
% Creating Task.Joose.Stable-3.04.tar.gz
% tar cf Task.Joose.Stable-3.04.tar Task.Joose.Stable-3.04
% gzip Task.Joose.Stable-3.04.tar
% Deleting Task.Joose.Stable-3.04
Thats all, tarball is ready for uploading to JSAN.
The Mantra
JSAN modules can be installed from expanded tarballs using this simple mantra:
perl Build.PL
./Build
./Build install
The Magic
For more in-depth explanations please refer to Module::JSAN::Tutorial
AUTHOR
Nickolay Platonov, <nplatonov at cpan.org>
BUGS
Please report any bugs or feature requests to bug-module-jsan at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Module-JSAN. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Module::JSAN
You can also look for information at:
RT: CPAN's request tracker
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
Many thanks to Curtis Jewell, who's Module::Build::Functions made this module possible.
Many thanks to Jarkko Hietaniemi for his ExtUtils::MakeMaker::Tutorial, from which a lot of content were borrowed.
COPYRIGHT & LICENSE
Copyright 2009 Nickolay Platonov, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 256:
You forgot a '=back' before '=head2'