@definejs/packer

3.0.0 • Public • Published

@definejs/packer

这是一个工具包,不属于 @definejs 中的某个模块。

把 npm 上的 @definejs/ 域内的其它模块打包成适用于浏览器端的模块或单一的库。

安装

npm install @definejs/packer

运行打包

const packer = require('@definejs/packer');

packer.pack({
    //必选,是否需要通过 `npm install` 进行安装包。
    //在某些情况下,为了加快打包速度,可以避免重复下载和安装包。
    //指定为 true,则会删除之前的包(如果存在),并且重新下载和安装包。
    //指定为 false,可以复用之前已安装下好的包,请确保 tempDir 目录中的包已存在。
    install: true,

    //必选,需要打包的种子 package 名称列表,会自动搜索所有依赖的包。
    //包的域名 `@definejs/` 可加可不加,如果不加,则工具会自动补全。
    //这些种子包会给添加到 tempDir 目录中的 package.json 文件中的 dependencies 字段中。
    packages: [
        // 'api',
    ],

    // //以下方式可以指定版本号,必须使用全名称,即包括域名 `@definejs/`。
    // packages: {
    //     '@definejs/api': '^0.1.0',
    // },

    // //当指定为 true 时,则使用 tempDir 目录中 package.json 文件中的 dependencies 字段。
    // //请确保 tempDir 目录中 package.json 文件存在。
    // packages: true,

    // //当指定为某个具体的 package.json 文件时,则使用里面的 dependencies 字段。
    // //请确保指定的 package.json 文件存在。
    // packages: './temp/default/package.json',



    //必选,需要导出的全局对象。
    globalExports: {
        name: 'KISP',

        //可选,需要绑定到全局对象的快捷方法。
        bind: {

        },
    },

    //可选,第三方库的配置。
    //默认情况下,工具在打包时会把第三方库的模块代码内联进来,定义成一个完整的模块,但这样会造成打包文件过大。
    //如果要把第三库从打包文件中剥离出去,需要手动指定它在 window 环境下对应的全局名称,
    //如在 npm 模块中 `jquery` 包对应的 window 环境的全局对象名为 `jQuery`。
    thirds: {
        // 'jquery': 'jQuery',                 //在 window 环境中的全局对象为 `jQuery`,而不是 `jquery`。
        // 'circular-json': 'CircularJSON',    //在 window 环境中的全局对象为 `CircularJSON`。
    },


    //以下配置项不建议修改。
    //必选,下载和安装包所要存放的目录。
    tempDir: './temp/',

    //必选,构建输出的目录。
    outputDir: './output/',

    //可选,打包完成后需要复制到的目录,以便用于测试和体验。
    // copyDir: './test/htdocs/f/',


});

简介

@definejs/ 域内的模块都是在 npm 上面的,符合 CommonJS 规范,可以直接用于 node 端,也可以通过 webpack 打包工具用于浏览器端。

如果想把相关的模块打包成一个库,以用于浏览器端的页面中,则需要使用其它的打包方式,本工具则是为了解决此问题而诞生的。通过本工具打包成一个单一的库文件 definejs.debug.jsdefinejs.min.js 后,可以直接用于浏览器端的页面中。

用于开发环境:

<link rel="stylesheet" href="definejs.debug.css" />
<script src="definejs.debug.js"></script>

用于生产环境:

<link rel="stylesheet" href="definejs.min.css" />
<script src="definejs.min.js"></script>

由于 @definejs/ 域内的模块都是通过 npm 进行管理的,只需要指定要打包的种子包名,本工具即可自动分析出依赖关系,把所有相关的依赖包都一起打包成一个文件。 例如用户指定要对 @definejs/emitter 进行打包,由于它还依赖了 @definejs/object@definejs/tree,则工具会把它们三个都一起打包,用户只需要指定@definejs/emitter 作为要打包的种子 package 即可,无需关心它依赖的 package @definejs/object@definejs/tree

每个 package 内包含多个模块文件,一个 package 内只能包含一个主模块文件,package 内的其它模块文件则服务于主模块。为了把 node 端的模块打包成浏览器端的模块,需要对它进行 define() 函数的包裹:

define('API', function (require, module, exports) {
	const Ajax = module.require('Ajax');
	//module.exports = ....
});

同一个 package 内,主模块与其它模块之间形成一棵树的关系,在用 define() 函数包裹后,它们的内在关系也会形成形成一棵树:

define('API/Ajax', function (require, module, exports) {
	//module.exports = ....
});

上面的 API 模块与 Ajax 模块是上下级关系,只有直接上级能调用直接下级,即只有 API 模块能加载 Ajax 模块:在 API 模块里通过 module.require('Ajax') 的方式。

Readme

Keywords

none

Package Sidebar

Install

npm i @definejs/packer

Weekly Downloads

0

Version

3.0.0

License

MIT

Unpacked Size

56.1 kB

Total Files

40

Last publish

Collaborators

  • micty