成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

npm包發(fā)布記錄

李文鵬 / 1206人閱讀

摘要:下雪了,在家閑著,不如寫一個(gè)包發(fā)布。簡單的包的發(fā)布網(wǎng)上有很多教程,我就不記錄了。這里記錄下,一個(gè)復(fù)雜的包發(fā)布,復(fù)雜指的構(gòu)建環(huán)境復(fù)雜。同時(shí)發(fā)布格式的版本以供外部調(diào)用。

下雪了,在家閑著,不如寫一個(gè)npm 包發(fā)布。簡單的 npm 包的發(fā)布網(wǎng)上有很多教程,我就不記錄了。這里記錄下,一個(gè)復(fù)雜的 npm 包發(fā)布,復(fù)雜指的構(gòu)建環(huán)境復(fù)雜。

整個(gè)工程使用 rollup 來構(gòu)建,其中會(huì)引進(jìn) babel 來轉(zhuǎn)譯 ES6,利用 Eslint 來規(guī)范代碼的書寫風(fēng)格,最后代碼的發(fā)布會(huì)經(jīng)過 terser 壓縮。同時(shí)發(fā)布 umd、es 格式的版本以供外部調(diào)用。

完整目錄結(jié)構(gòu)如下:

下面是整個(gè)過程的記錄

一、初始化工程

yarn init -y

初始化后,修改 package.json 內(nèi)容,如 name(項(xiàng)目名),description(項(xiàng)目描述)等信息。

二、安裝 rollup

yarn add [email protected] --dev

三、創(chuàng)建配置文件 rollup.config.js

export default {
  input: "src/index.js",
  output: {
    file: "index.common.js",
    format: "umd",
    name: "index"
  }
}

四、安裝 babel

yarn add [email protected] @babel/[email protected] @babel/[email protected] --dev

五、配置 babel

1、創(chuàng)建配置文件 .babelrc

{
  "presets": [
   [
    "@babel/preset-env",
    {
     "modules": false
    }
   ]
  ]
}

2、與 rollup 集成,在 rollup.config.js 中配置 plugins

import babel from "rollup-plugin-babel"

export default {
  input: "src/index.js",
  output: {
    file: "index.common.js",
    format: "umd",
    name: "index"
  },
  plugins: [
    babel({
      exclude: "node_modules/**",
      runtimeHelpers: true
    })
  ]
}

六、安裝 eslint

yarn add [email protected]

七、配置 eslint

1、生成 eslint 配置

.
ode_modules.bineslint --init

2、與 rollup 集成,在 rollup.config.js 中配置 plugins

import babel from "rollup-plugin-babel"
import { eslint } from "rollup-plugin-eslint"

export default {
  input: "src/index.js",
  output: {
    file: "index.common.js",
    format: "umd",
    name: "index"
  },
  plugins: [
    eslint({
      include: ["src/**"],
      exclude: ["node_modules/**"]
    }),
    babel({
      exclude: "node_modules/**",
      runtimeHelpers: true
    })
  ]
}

八、commonjs 兼容

yarn add [email protected] [email protected] --dev

九、與 rollup 集成,在 rollup.config.js 中配置 plugins

import babel from "rollup-plugin-babel"
import { eslint } from "rollup-plugin-eslint"
import resolve from "rollup-plugin-node-resolve"
import commonjs from "rollup-plugin-commonjs"

export default {
  input: "src/index.js",
  output: {
    file: "index.common.js",
    format: "umd",
    name: "index"
  },
  plugins: [
    resolve({
      jsnext: true,
      main: true,
      browser: true
    }),
    commonjs(),
    eslint({
      include: ["src/**"],
      exclude: ["node_modules/**"]
    }),
    babel({
      exclude: "node_modules/**",
      runtimeHelpers: true
    })
  ]
}

十、安裝 terser, 用來壓縮代碼

yarn add [email protected] --dev

十一、與 rollup 集成,在 rollup.config.js 中配置 plugins

import babel from "rollup-plugin-babel"
import { eslint } from "rollup-plugin-eslint"
import resolve from "rollup-plugin-node-resolve"
import commonjs from "rollup-plugin-commonjs"
import { terser } from "rollup-plugin-terser"

export default {
  input: "src/index.js",
  output: {
    file: "index.common.js",
    format: "umd",
    name: "index"
  },
  plugins: [
    resolve({
      jsnext: true,
      main: true,
      browser: true
    }),
    commonjs(),
    eslint({
      include: ["src/**"],
      exclude: ["node_modules/**"]
    }),
    babel({
      exclude: "node_modules/**",
      runtimeHelpers: true
    }),
    terser()
  ]
}

十二、引入環(huán)境變量,實(shí)踐差異化打包

1、安裝插件

yarn add [email protected] --dev

2、配置 plugins

import babel from "rollup-plugin-babel"
import { eslint } from "rollup-plugin-eslint"
import resolve from "rollup-plugin-node-resolve"
import commonjs from "rollup-plugin-commonjs"
import { terser } from "rollup-plugin-terser"
import replace from "rollup-plugin-replace"

export default {
  input: "src/index.js",
  output: {
    file: "index.common.js",
    format: "umd",
    name: "index"
  },
  plugins: [
    resolve({
      jsnext: true,
      main: true,
      browser: true
    }),
    commonjs(),
    eslint({
      include: ["src/**"],
      exclude: ["node_modules/**"]
    }),
    babel({
      exclude: "node_modules/**",
      runtimeHelpers: true
    }),    
    replace({
      exclude: "node_modules/**",
      ENVIRONMENT: JSON.stringify(process.env.NODE_ENV)
    }),
    terser()
  ]
}

十三、參數(shù)化配置,加入版權(quán)說明,最終配置如下

import resolve from "rollup-plugin-node-resolve"
import commonjs from "rollup-plugin-commonjs"
import { eslint } from "rollup-plugin-eslint"
import babel from "rollup-plugin-babel"
import replace from "rollup-plugin-replace"
import { terser } from "rollup-plugin-terser"

const pJson = require("./package.json")

const version = pJson.version
const license = pJson.license

const banner =
  "/*!
" +
  ` * ${pJson.name} v${version}
` +
  ` * (c) 2018-${new Date().getFullYear()}
` +
  ` * Released under the ${license} License.
` +
  " */"

const ENV = process.env.NODE_ENV.trim()

const paths = {
  input: {
    root: "src/index.js"
  },
  output: {
    root: "dist/"
  }
}

const fileNames = {
  development: "index.common.js",
  production: "index.common.js",
  production6: "index.esm.js"
}
const fileName = fileNames[ENV]

export default {
  input: `${paths.input.root}`,
  output: {
    file: `${paths.output.root}${fileName}`,
    format: ENV === "production6" ? "es" : "umd",
    name: "index",
    banner
  },
  plugins: [
    resolve({
      jsnext: true,
      main: true,
      browser: true
    }),
    commonjs(),
    eslint({
      include: ["src/**"],
      exclude: ["node_modules/**"]
    }),
    babel({
      exclude: "node_modules/**",
      runtimeHelpers: true
    }),
    replace({
      exclude: "node_modules/**",
      ENVIRONMENT: JSON.stringify(process.env.NODE_ENV)
    }),
    ENV && ENV.includes("production") && terser({ output: { comments: /^!/ } })
  ]
}

三、業(yè)務(wù)代碼編寫

在 src/index.js 中編寫具體業(yè)務(wù)代碼

四、打包

在 package.json 中添加

"scripts": {
    "dev": "set NODE_ENV=development && rollup -c",
    "build": "yarn run buildcjs && yarn run buildesm",
    "buildcjs": "set NODE_ENV=production && rollup -c",
    "buildesm": "set NODE_ENV=production6 && rollup -c"
}

運(yùn)行命令

yarn run build

五、發(fā)布

npm publish

發(fā)布前記得記得 注冊(cè) 帳號(hào),記得修改 package.json 中 private 字段為 false

"private": false

后記:[email protected][email protected] 時(shí)有警告,文章中原 rollup-plugin-uglify 被替換成 rollup-plugin-terser

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100548.html

相關(guān)文章

  • npm入手筆記0x003-一些常見問題記錄

    摘要:如何選擇就如果上面所有,需要打包進(jìn)生產(chǎn)環(huán)境就保存到,只是在開發(fā)或者打包的時(shí)候使用的就保存到即可。提示不能發(fā)布當(dāng)前版本解決方案不能發(fā)布已經(jīng)發(fā)布的版本,修改一下版本號(hào)就可以了想不到了,想到了再寫資源項(xiàng)目 0x001 概述 本篇文章承接上文,記錄的是一些使用過程中的疑惑 0x001 墻的原因使得包下載太慢 解決方案:使用淘寶cnpm,推薦使用cnpm,因?yàn)槿绻薷膎pm倉庫,將會(huì)導(dǎo)致無法發(fā)布...

    luffyZh 評(píng)論0 收藏0
  • 如何設(shè)計(jì)npm的開發(fā)和發(fā)布流程

    摘要:所以此版本號(hào)在這里的作用并不是用來區(qū)分版本的,小版本號(hào)才是真正用來做版本區(qū)分的,那么在引用這個(gè)就要這么來控制版本號(hào),舉個(gè)栗子鎖定大版本號(hào)和小版本號(hào),不管我們開發(fā)過程中提交了多少次,我們引用都是最新的。 最近在把公司內(nèi)部用的一個(gè)庫發(fā)布到內(nèi)網(wǎng)的npm私服上,僅僅是發(fā)布的話是比較簡單的,但這個(gè)庫是由多個(gè)人一起維護(hù)的,而且npm私服只有一套,所以生產(chǎn)環(huán)境和開發(fā)環(huán)境,用的是同一個(gè),那么,我們的需...

    qieangel2013 評(píng)論0 收藏0
  • 生成自己的js工具,括打webpack、測(cè)試mocha、生成文檔jsdoc、發(fā)布npm的操作

    摘要:包說明包實(shí)際是一個(gè)存檔文件,即一個(gè)目錄直接打包為或格式的文件,安裝后解壓還原為目錄。完全符合規(guī)范的包目錄應(yīng)該包含如下這些文件包描述文件。用于存放單元測(cè)試用例的代碼。 keepsmiling說明 一些常用的函數(shù)集合,主要用到的技術(shù)如下: ES6的包處理方式; webpack打包方式; BDD測(cè)試用例,只寫了部分; 使用jsdoc生成注釋文檔; 你用eslint優(yōu)化代碼格式; 主...

    Code4App 評(píng)論0 收藏0
  • 發(fā)布 react 組件到 npm

    摘要:我發(fā)布了我的第一個(gè)組件,一個(gè)基于的標(biāo)簽云組件。然后將這個(gè)編譯命令寫到里,如下那么以后要編譯下面的代碼,只需要執(zhí)行現(xiàn)在我們已經(jīng)有編譯好的代碼了,接下來就可以發(fā)布到供其他人使用了。 我發(fā)布了我的第一個(gè) npm 組件,一個(gè)基于 react 的 3d 標(biāo)簽云組件。在這途中我也是遇到了很多的坑,花在完善整個(gè)發(fā)布流程的時(shí)間遠(yuǎn)多于寫這個(gè)組件本身的時(shí)間,所以我記錄下我覺得一個(gè)正常的 react 組件的...

    Yi_Zhi_Yu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<