npm關鍵點之npm包編寫與發佈

編寫的一個腳手架(或組件)可以發佈爲npm包來讓其它項目使用。
以@mosfe/beam爲例,發佈一個npm包大概需要以下幾步:

發佈npm包

1、編寫腳手架內容和入口文件

寫好一個腳手架或組件,新建一個index.js文件作爲該組件的入口文件。
index.js 可以作爲組件的唯一入口,即package.json main屬性對應的值。在安裝該npm包後會先執行index.js文件。代碼如下:

index.js

module.exports = require('./lib/bone');

./lib/bone.js

/**
** 註冊全局屬性bone
**/
const path = require('path');
const bonePackage = require('../package.json');
...
const bone = module.exports = {};
bone.name = bonePackage.name;
...
// register global variable
Object.defineProperty(global, 'bone', {
    enumerable: true,
    writable: false,
    value: bone
});
...
bone['cli'] = require(path.join(__dirname, 'cli'));

2、配置bin命令。

如果是工具類npm包,則需要配置bin命令來供其它項目調用。如vue-cli配置的bin命令爲:vue-cli-serve,其它項目即可直接調用vue-cli-serve命令。

package.json中配置bin如下:

"bin": {
    "beam": "./bin/bone"
  }

其中./bin/bone.js

const { cli } = bone;
cli.run();
 /* 給 beam 添加註冊命令行選項或指令  */
 cli.run = () => {
    	// 添加註冊查看版本選項
    	program
        .option('-v, --version')
        .version(JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')).version);
    }

// 給 beam 添加註冊指令 init <app-name>
program
	.command('init <app-name>')
        .description('init project')
        .option('-c, --current <current>', 'create project in current directory, equivalent to <app-name> is . (beam init .)')
        .action(async(name, cmd) => {
        	......
        }

// 給 beam 添加註冊指令 list
program
	.command('list')
        .description('list available beam templates')
        .action(async() => {
        	const list = ['name0', 'name1'];
			console.log('list 如下:' + list);
		}

上面的配置即表示該npm包對外配置了一個命令beam,調用beam命令相當於執行./bin/bone.js文件內容。

3、執行npm init

初始化生成package.json,設置好main:index.js;bin:{ “beam”: ‘./bin/bone’ }的配置關係。

4、執行npm adduser 註冊npm用戶

官網註冊和npm命令註冊兩種方式。
官網註冊直接按提示註冊用戶名密碼即可。
npm命令註冊:npm adduser

5、執行npm login登錄npm

6、執行npm publish 發佈包

更新發布npm包時,先修改package.json中version,再執行npm publish發佈。

其它詳見:手把手教你用npm發佈包

關於bin

package.json中的bin配置了一組命令:文件的映射關係,來對外提供執行該npm包相關功能的命令。其依據是:
在這裏插入圖片描述
該軟連接就是一個文件,文件名爲beam,文件內容爲beam對應的js文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章