0.3.3 • Published 4 years ago

@surmon-china/abc-factory v0.3.3

Weekly downloads
14
License
MIT
Repository
github
Last release
4 years ago

abc-factory

GitHub stars npm (scoped) GitHub package.json version GitHub Workflow Status GitHub last commit license

📦 JavaScript bundler/linter/tester, by Rollup/ESlint/Jest.

🏭 JavaScript 开发生产一条龙工具,零配置、开箱即用。


Usage

yarn add @surmon-china/abc-factory --dev

package.json

"scripts": {
  "build": "abc build",
  "lint": "abc lint --ext .ts,.vue src",
  "test": "abc test",
  "test:watch": "abc test --watch -i",
}
yarn build

Config

Create abc.config.js in project root. More detail is here.

abc.config.js type: AbcConfigObject | AbcConfigObject[] | (defaultRollupConfig) => RollupConfog.

config object

// abc.config.js
module.exports = {

  // entry file, default: 'src/index.js'
  entry?: string

  // lib name, default: auto get by package.json.name, like: 'VueAwesomeSwiper'
  name?: string

  // out file name, default: auto get by package.json.name, like: 'vue-awesome-swiper'
  fileName?: string

  // output dir, default: 'dist'
  outDir?: string

  // output bundle types, default: ['umd', 'esm', 'cjs']
  targets?: string[]

  // exports moudle type, default: 'auto'
  exports?: string

  // @rollup/plugin-replace config, default { PACKAGE_VERSION, 'process.env.NODE_ENV' }
  replace?: object

  // parser type, default: 'buble', options: 'buble' | 'babel'
  parser?: string
  // parser plugin options, default rollup-plugin-buble options
  parserOptions?: object // {}

  // todo file formats, default: ['.mjs', '.js', '.jsx', '.json', '.ts']
  resolve?: string[]

  // enable vue plugin, default: auto get by package.json.<xxx>dependencies
  vue?: false | { /* rollup-plugin-vue config */ }

  // enable eslint plugin (before build), default: false
  eslint?: false | { /* rollup-plugin-eslint config */ }

  // enable typescript plugin (before build), default: auto get by package.json.dependencies
  typescript?: false | { /* rollup-plugin-typescript2 config */ }

  // compression
  minimize?: boolean // true

  // file header
  banner?: string // default: https://github.com/surmon-china/abc-factory/blob/master/lib/default.js#L18

  // Refer to https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
  // list external dependencies, exactly the way it is written in the import statement.
  external?: string[]

  // Refer to https://rollupjs.org/guide/en#output-globals for details
  // Provide global variable names to replace your external imports
  globals?: {
    [key: string]: string
  }
}

config function

// abc.config.js
module.exports = (defaultRollupConfig): RollupConfog => {
  // overwrite the default Rollup confog
  // ...
  return RollupConfig
}

Preset (about abc provide preset configs)

tsconfig.json - extends

{
  "extends": "./node_modules/@surmon-china/abc-factory/preset/tsconfig/vue",
  // your options like:
  "compilerOptions": {
    "declaration": true,
    "declarationDir": "types",
    "baseUrl": ".",
    // ...
  },
  "exclude": [
    "node_modules",
    "dist",
    // ...
  ]
}

jest.config.js - extends

const abcJestConfig = require('@surmon-china/abc-factory/preset/jest/vue.typescript')
module.exports = {
  ...abcJestConfig,
  rootDir: __dirname,
  testRegex: "(/tests/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
  moduleNameMapper: {
    '^vue$': path.resolve(__dirname, './node_modules/vue/dist/vue.common.js'),
  },
  globals: {
    'ts-jest': {
      // https://kulshekhar.github.io/ts-jest/user/config/isolatedModules
      isolatedModules: true
    }
  }
  // ...
}

.eslintrc.js extends

module.exports = {
  extends: './node_modules/@surmon-china/abc-factory/preset/eslintrc/vue.typescript',
  rules: {
    // rules...
  }
}