Package.json

May 29, 2015 ยท View on GitHub


spm use the exactly same file package.json as npm to describe a package, which shares most fileds, except an extra spm filed for containing some custom attributes.

Fields

FieldDescription
name*name of the package in lowercase, use a - or . as a separator between words
version*semantic versioning like 1.0.0
descriptiona brief description of the package
keywordsan array of keywords
homepageurl of the package's website
authorauthor of the package: Hsiaoming Yang <me@lepture.com> or { "name": "Hsiaoming Yang", "email": "me@lepture.com" }
maintainersan array of maintainers, just like author
repositoryspecify the place where the code is hosted. { "type": "git", "url": "http://github.com/isaacs/npm.git" }
bugsthe url to the package's issue tracker and / or the email address to which issues should be reported.
licenselicense
spm*
spm.mainthe only entry point of the package, default index.js, or could be set to index.css for a css-only package
spm.outputan array of other files needed to be output
spm.dependenciesspecify dependencies relation of the package
spm.devDependenciesspecify dependencies relation of the package in developing situation
spm.testsspecify all test files, support glob patterns: tests/*-spec.js
spm.buildspecify the cli arguments for spm build
spm.ignorean array of ignore files in package, same function as .spmignore
spm.scriptslike npm.scripts, handle around some spm commands, it support prebuild, postbuild, preinstall, postinstall, prepublish, postpublish. Not recommend to use!

A basic example

{
  "name": "arale-calendar",
  "version": "1.1.0",
  "description": "Calendar widget.",
  "keywords": [
    "widget",
    "month",
    "datepicker"
  ],
  "author": "Hsiaoming Yang <me@lepture.com>",
  "maintainers": [
    "hotoo <hotoo.cn@gmail.com>",
    "shengyan <shengyan1985@gmail.com>"
  ],
  "homepage": "http://aralejs.org/calendar/",
  "repository": {
    "type": "git",
    "url": "https://github.com/aralejs/calendar.git"
  },
  "bugs": {
    "url": "https://github.com/aralejs/calendar/issues"
  },
  "license": "MIT",
  "spm": {
    "main": "calendar.js",
    "dependencies": {
      "jquery": "1.7.2",
      "moment": "2.6.0",
      "arale-base": "1.1.0",
      "arale-position": "1.1.0",
      "arale-iframe-shim": "1.1.0",
      "handlebars": "1.3.0",
      "arale-widget": "1.2.0"
    },
    "devDependencies": {
      "expect.js": "0.3.1"
    },
    "tests": "tests/*-spec.js",
    "ignore": ["dist"],
    "build": {
      // -- Dependency resolution
      // Specify the module or the file does not to be resolved
      "global": {
        "react": "React",
        "./a": "AAA"
      },

      // To enable or disable the node module polyfills
      "node": {
        "global": false
      },

      // -- Performance
      // Extraction Dependencies as vendor.js
      "vendor": ["jquery", "underscore"],
      // Extraction public chunk as common.js
      "common": true,
      "base64": {},

      // -- For other useful js libraries
      "babel": {},
      "uglify": {},
      "autoprefixer": {},
      "less": {},
      "coffee": {},
      "jsx": {},
      "handlebars": {},

      // -- output entries
      "dest": "./build",
      "hash": true,
      // extract css files which js files depend on , the css file name is same to the js file which specified in output field
      "extractCSS": true,
      // Output package names
      "library": "",
      // ex. this, umd, common, amd, var ...
      "libraryTarget": "",
      // equivalent to libraryTarget: umd, library: Foo
      "umd": "Foo",

      //expander  , same to the webpack loader
      "loader": {
        ".js": "+jsdc-babel"
      },

      // use for debugging
      "define": {
        "DEBUG": false
      }
    },
    "scripts": {
      // Not recommend to use!
      "prepublish": "lessc index.less index.css"
    }
  }
}