Создание пакетов NPM на основе Webpack и ES6

Node.js внешний интерфейс JavaScript NPM Webpack

использоватьES6написать код, использоватьWebpackУпакуйте и экспортируйте модуль и опубликуйте его в сообществе NPM, добавьте на основеTravis-CIа такжеCoverallsпостоянная интеграция в проект Github

характеристика

  1. на основеWebpack 4
  2. Напишите исходный код, используя ES6
  3. Поддержка модуля:
    • Используется в среде браузера через<script>тег для импорта этой библиотеки
    • пройти черезNPMУстановите и используйте
    • Модульная система, совместимая с ES6 (ES2015),CommonJSа такжеAMDСпецификация модуля
  4. использоватьAVAавтоматизация тестирования и прохождениеnycПокрытие тестового кода
  5. Непрерывная интеграция (Travis-CI + Coveralls)
  6. использоватьESLint + StandradПроверить качество кода

Инициализация проекта

1. Создайте репозиторий иcloneк местному

$ git clone https://github.com/eteplus/typeof

2. Добавьте .editorconfig

root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.yml]
indent_style = space
indent_size = 2

3. Создайте каталог

+-- src 源码目录
|   +-- typeof.js
|   +-- types.js
+-- test 测试用例
|   +--- test.js
+-- dist 输出目录
.
.

4. Создайте package.json

использоватьОбъем НПМУправляйте модулями выпуска, избегайте модулей с одинаковыми именами, обычно используйтеимя пользователязарегистрировать приватные модули (@eteplus/<package name>)

$ npm init --scope=eteplus
package name: (@eteplus/typeof)
version: (1.0.0) 0.1.0
description: The typeOf method returns a string indicating the type of the value
entry point: (index.js) dist/typeof.js
test command:
git repository: https://github.com/eteplus/typeof.git
keywords: node,javascript,typeof
author: eteplus
license: (ISC) MIT
About to write to /Users/eteplus/Workspace/Node/study/typeof/package.json:

{
  "name": "@eteplus/typeof",
  "version": "0.1.0",
  "description": "The typeOf method returns a string indicating the type of the value",
  "main": "dist/typeof.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/eteplus/typeof.git"
  },
  "keywords": [
    "node",
    "javascript",
    "typeof"
  ],
  "author": "eteplus",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/eteplus/typeof/issues"
  },
  "homepage": "https://github.com/eteplus/typeof#readme"
}

5. Инициализация ESLint

Создано автоматически.eslintrc.jsфайл и установить соответствующие зависимости (вы можете выбрать спецификацию кода в соответствии с вашими предпочтениями)

  1. Установить ESlint
# or use yarn
$ npm install eslint -D
$ npm install eslint -g # 全局安装ESLint
$ eslint --init

? How would you like to configure ESLint? Use a popular style guide
? Which style guide do you want to follow? Standard
? What format do you want your config file to be in? JavaScript
  1. Добавить к.eslintignoreфайл игнорирует обнаружение кода для выходного каталога
dist/

6. Создайте файлы конфигурации для webpack и babel

  1. Установите связанные зависимости:
$ npm install webpack webpack-cli uglifyjs-webpack-plugin -D
$ npm install babel-loader babel-core babel-plugin-transform-runtime babel-preset-env -D
$ npm install eslint-loader eslint-friendly-formatter -D
  1. Создайтеwebpack.config.js:

Описание элемента конфигурации вывода webpackВеб-пакет Просто .org/config как у ATI...

'use strict'

const path = require('path')
const webpack = require('webpack')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

const resolve = dir => path.join(__dirname, '.', dir)

const isProd = process.env.NODE_ENV === 'production'

module.exports = {
  entry: {
    typeof: './src/typeof.js'
  },
  output: {
    path: resolve('dist'), // 输出目录
    filename: '[name].js', // 输出文件
    libraryTarget: 'umd', // 采用通用模块定义
    library: 'typeOf', // 库名称
    libraryExport: 'default', // 兼容 ES6(ES2015) 的模块系统、CommonJS 和 AMD 模块规范
    globalObject: 'this' // 兼容node和浏览器运行,避免window is not undefined情况
  },
  devtool: '#source-map',
  module: {
    rules: [
      {
        test: /\.(js)$/,
        loader: 'eslint-loader',
        enforce: 'pre',
        include: [resolve('src'), resolve('test')],
        options: {
          formatter: require('eslint-friendly-formatter')
        }
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /(node_modules)/
      }
    ]
  },
  plugins: isProd
    ? [
      new UglifyJsPlugin({
        parallel: true,
        uglifyOptions: {
          compress: {
            warnings: false
          },
          mangle: true
        },
        sourceMap: true
      })
    ]
    : [
      new webpack.HotModuleReplacementPlugin(),
      new webpack.NamedModulesPlugin(),
      new webpack.NoEmitOnErrorsPlugin()
    ]
}
  1. Создайте.babelrc:

Помощники и полифиллы включаются/отключаются в зависимости от реальной ситуации, см. конкретную конфигурацию (babel-plugin-transform-runtime)

{
  "presets": ["env"],
  "plugins": [
    ["transform-runtime", {
      "helpers": false,
      "polyfill": false
      }
    ]
  ]
}

7. Добавьте команду npm

добавить в package.jsonнпм-команда, выполнить задачу через npm run [имя]

{
  "scripts": {
    "dev": "NODE_ENV=development webpack --config webpack.config.js --mode=development -w",
    "build": "NODE_ENV=production webpack --config webpack.config.js --mode=production",
    "lint": "eslint ."
  }
}

Тестирование и покрытие кода

использоватьAVA + nycАвтоматизированное тестирование и тестирование покрытия кода

1. УстановкаAVAа такжеnyc

$ npm install ava nyc -D

2. Добавьте конфигурацию ava и nyc в package.json.

AVA:

  • файлы: файлы вариантов использования для тестирования
  • verbose: включить подробный вывод
  • babel: конфигурация babel для тестовых файлов, «наследовать» использует .babelrc в корневом каталоге
  • require: перед запуском тестов требуются дополнительные модули

Другие элементы конфигурации:

Нью-Йорк:

{
  "ava": {
    "files": [
      "test/test.js"
    ],
    "verbose": true,
    "babel": "inherit",
    "require": [
      "babel-core/register"
    ]
  },
  "nyc": {
    "exclude": [
      "test/*.js"
    ]
  }
}

3. Добавьте команду npm

{
  "scripts": {
    ...
    "test": "npm run lint && nyc ava",
    "test:watch": "ava --watch"
  }
}

Непрерывная интеграция Travis CI

1. Войдите в Travis-CI

travis-ci.org, используйте авторизацию Github для входа

2. Добавить репо

2018-04-04-13-54-44

3. Создать.travis.yml

Добавьте в корневой каталог проекта.travis.yml

проиллюстрировать:

  • язык определяет язык разработки
  • node_js указывает номер версии node.js

Другие элементы конфигурации:

language: node_js
node_js:
- '9'
- '8'
- '7'

4. Отправить.travis.yml

представить.travis.ymlПерейти к GitHub, Trvis-CI автоматически запускает непрерывную интеграцию на основе коммитов, вы можете отменить автоматическое запуск непрерывной интеграции на основе коммитов в настройках

2018-04-04-14-40-03

5. Получить значок

Значок «Получить результаты непрерывной интеграции» добавлен кREADME.mdсередина

2018-04-04-14-45-47

Комбинезоны с тестовым покрытием

1. Войдите в комбинезон

coveralls.io, используйте авторизацию Github для входа

2. Добавить репо

2018-04-04-14-27-17

3. Зашифровать repo_token

В целях безопасности repo_token не следует записывать открытым текстом..travis.ymlкомбинезон предоставляет способ асимметричного шифрования repo_token

2018-04-04-14-55-11
# 更改为国内的安装源
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
$ gem sources -l
# 安装travis
$ sudo gem install travis -v 1.8.8 --no-rdoc --no-ri
$ travis version
1.8.8
# 加密
travis encrypt COVERALLS_REPO_TOKEN=your_repo_token
2018-04-04-15-28-22
  • добавить зашифрованныйsecureприбыть.travis.yml

Исправлять.travis.yml, установите переменную среды env (один из методов безопасности repo_token, предоставляемых travis), вы также можете использовать--addавтоматически добавляется в.travis.ymlсередина.

2018-04-04-15-33-53

4. Установите комбинезоны и добавьте команду npm

  • установить комбинезон
$ npm install coveralls -D
  • добавить команду нпм

nycСоздайте отчет о покрытии, чтобы отправить егоcoveralls

{
  "scripts": {
    ...
    "coverage": "nyc report --reporter=text-lcov | coveralls"
  }
}

5. Модификация.travis.yml

  • Добавить кafter_success: npm run coverage

after_success: Выполняется при успешном выполнении этапа сценария. Сценарий по умолчанию для этапа сценарияnpm test, можно опустить

2018-04-04-16-23-41
  • Повторно отправьте на Github, запустите непрерывную интеграцию, чтобыcoveralls.ioПросматривайте отчеты о покрытии и добавляйте значки на README.md
2018-04-04-16-46-58

Публикация модулей в сообществе NPM

1. Упаковка кода

$ npm run build

2. Добавить учетную запись

нужно приехать первымwww.npmjs.comзарегистрировать аккаунт

$ npm adduser
Username: your username
Password: your password
Email: your email

3. Опубликовать

Пакеты с незаданной областью всегда общедоступны. Существуют области, которые ограничены по умолчанию и могут использоваться с–-access publicПри публикации установите разрешение на общедоступность

$ npm publish --access public

Правило номера версии сообщества npm использует semver (семантическая версия).Основные правила следующие:

Формат версии: основной номер версии, дополнительный номер версии, номер редакции.

Правила увеличения номера версии следующие:

  • Номер основной версии: когда вы вносите несовместимое изменение API,
  • Второстепенный номер версии: Когда вы делаете обратно совместимые функциональные дополнения,
  • Номер редакции: при исправлении ошибки для обратной совместимости.
  • Номер предыдущей версии и информация о компиляции версии могут быть добавлены в конце «основной номер версии. дополнительный номер версии. номер редакции» в качестве расширения.

Добавить персональный значок

рекомендоватьshields.io/

Добавляйте различные значки к таким предметам, как:

  • Прохождение теста и покрытие кода
  • последняя версия проекта
  • Использование проекта
  • стиль кода
  • Лицензия проекта с открытым исходным кодом
2018-04-04-17-34-28

пример проекта

Этот проект содержит всю полную конфигурацию учебника.

Адрес на гитхабе:GitHub.com/etprussia/трейлерная бутылка…

Ссылки по теме