Utility functions for projects production

栏目: IT技术 · 发布时间: 6年前

内容简介:Utility functions deal with files in your project. Make production easierIf not passed path or ext (more likely you don't need to), then all functions can automatically read the current project directory whether it is

get-info

Utility functions deal with files in your project. Make production easier :mag_right:

get-info Contains a bunch od functions read packages in root project, validate each package, return the path, JSON, and extension(js|ts) used for each one. As it is essentially created to deal with monorepos, it works as well for a single package project.

npm install get-info

API

If not passed path or ext (more likely you don't need to), then all functions can automatically read the current project directory whether it is packages/**/src or ./src

getPackagesInfo

/**
 * Gets package full info by passed name of packages.
 *
 * @param {Object} input
 * @param {Array} input.path Array contains paths to each package
 * @param {Array} input.ext Array contains extension associated to each package
 * @param {string} [input.buildName="dist"]
 * @returns {Object[]} results
 * @returns {Array} results[].ext
 * @returns {Array} results[].json
 * @returns {Array} results[].path
 */
const { json, ext } = getPackagesInfo({ buildName, path, ext })(
  ...packagesName
);

Example(1)

import { getPackagesInfo } from "get-info";

const { ext, json, path } = getPackagesInfo()("myFav/project another/project");

expect(json).to.be.an("Array");

expect(json.length).to.be.equal(2);

expect(json[0].name).to.be.equal("@myFav/project");
expect(json[1].name).to.be.equal("@another/project");

getJsonByPath

/**
 * Gets package json by path. Reads each passed directory. Then, returns
 * objects extracted form these json files including source and distention path.
 *
 * Note: this function validate accessability and throw error if there's
 * something wrong in src/index.ext
 *
 * @param {Array} path Array contains paths to each package
 * @param {Array} ext Array contains extension associated to each package
 *
 * @returns {Object[]} pkgInfo is an object of arrays
 * @returns {string} pkgInfo[].sourcePath
 * @returns {string} pkgInfo[].distPath
 * @returns {string} pkgInfo[].name
 * @returns {Object} pkgInfo[].peerDependencies
 * @returns {Object} pkgInfo[].dependencies
 * @returns {...*}   other
 */
const { json, ext } = getJsonByPath({ path, ext });

Example(2)

import { getJsonByPath } from "get-info";

const { json, ext } = getJsonByPath();

expect(json).to.be.an("Array");
expect(json.length).to.be.equal(1);
expect(json[0].name).to.be.equal("get-info");

getPackagesPath

/**
 * Gets packages path for a given project source root. It filters each path
 * returns only packages contain valid src/index and have package.json
 *
 * @param {string} dir packages main directory [path="./packages/*"]
 * @returns {Object[]} results
 * @returns {Array} results[].path valid path directory
 * @returns {Array} results[].ext extension for each path (js|ts)
 */
const { path, ext } = getPackagesPath({ dir });

Example(3)

import { getPackagesPath } from "get-info";

const { path, ext } = getPackagesPath();

const expectedPaths = [
  "./packages/myProj1",
  "./packages/myProj2",
  "./packages/myProj3"
];

const expectedExtensions = ["js", "ts", "ts"];

expect(path).to.deep.equal(expectedPaths);
expect(ext).to.deep.equal(expectedExtensions);

Utils

Utility functions used in this project are also exported for further use.

utils.getFileExtension

import { utils } from "get-info";

/**
 * Loop inside a given directory looking for index. When find it, gets its
 * extension.
 *
 * @param {string} dir - given directory
 * @returns {string} extension.
 */
const { getFileExtension } = utils;
const extension = getFileExtension(dir);

utils.validateAccessability

import { utils } from "get-info";

/**
 * Validates access readability `package.json` & `src` for given path.
 *
 * @param {string} dir
 * @param {string} [srcName="src"]
 * @returns {string} extension
 */
const { validateAccessability } = utils;
const extension = validateAccessability(dir, srcName);

utils.filterPathAccessability

import { utils } from "get-info";

/**
 * Filters array of path by validate each path. Make sure it has `package.json`
 * and `src`.
 *
 * @param {Array} [pkgPath=[]]
 * @returns {Object} results[]
 * @returns {Array} results[].path filtered valid paths
 * @returns {Array} results[].ext extension for each path (js|ts)
 */
const { filterPathAccessability } = utils;
const { path, ext } = filterPathAccessability(pkgPath);

Related projects

  • packageSorter - Sorting packages for monorepos production.

  • builderz - Building your project with zero config.

Tests

npm test

License

This project is licensed under the GPL-3.0 License


以上所述就是小编给大家介绍的《Utility functions for projects production》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

爆裂

爆裂

[美] 伊藤穰一、[美] 杰夫·豪 / 张培、吴建英、周卓斌 / 中信出版集团 / 2017-9-1 / 65.00元

越是在发生重大改变的时刻,越是会出现两极分化,赢家、输家有时只在一念间。未来已经装上了全新的操作系统。这是一个重大升级,对我们而言,随之而来的则是陡峭的学习曲线。在指数时代,替换旧逻辑,我们的思维亟需与世界对接,推翻过去已经成为大众所接受的常识,学会差异化思考才能屹立不倒,不被卷入历史的洪流。 在《爆裂》一书中,伊藤穰一和杰夫·豪将这一逻辑提炼为9大原则,帮助人们驾驭这一动荡时刻,应对当下的......一起来看看 《爆裂》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具