国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端工程化:發(fā)布一個(gè)屬于自己的規(guī)范 npm 包

這篇具有很好參考價(jià)值的文章主要介紹了前端工程化:發(fā)布一個(gè)屬于自己的規(guī)范 npm 包。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

初始化項(xiàng)目

前端工程化:發(fā)布一個(gè)屬于自己的規(guī)范 npm 包

首先在github創(chuàng)建一個(gè)倉(cāng)庫(kù),協(xié)議選擇MIT,gitignore選擇Node,添加README.md描述文件。使用git clone將項(xiàng)目克隆到本地。cd 進(jìn)入目錄,使用vscode打開(kāi)(終端輸入code . 命令即可)。

然后創(chuàng)建一個(gè)合理的目錄結(jié)構(gòu):

前端工程化:發(fā)布一個(gè)屬于自己的規(guī)范 npm 包

配置 typescript

{
  "compilerOptions": {
    "target":  "ES5",
    "outDir": "lib",
    "lib": [
      "DOM",
      "ES2018"
    ],
    "declaration": true,
    "checkJs": false,
    "noEmitOnError": true,
    "emitDeclarationOnly": true,
    "allowJs": true,
    "experimentalDecorators": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "importHelpers": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "pretty": true,
    "jsx": "react-jsx",
    "newLine": "lf",
    "typeRoots": [
      "./src/@types",
      "./node_modules/@types"
    ]
  },
  "include": [
    "src",
  ],
  "exclude": [
    "node_modules"
  ]
}

統(tǒng)一代碼風(fēng)格

首先,配置eslint,使用遵循Airbnb推出的JavaScript風(fēng)格指南的eslint-config-airbnb,eslint-config-airbnb-typescript。

前端工程化:發(fā)布一個(gè)屬于自己的規(guī)范 npm 包

?其次,配置prettier,安裝依賴(lài)prettier,.prettierrc.js的推薦配置如下:

module.exports = {
    // 一行最多 80 字符
    printWidth: 80,
    // 使用 2 個(gè)空格縮進(jìn)
    tabWidth: 2,
    // 不使用縮進(jìn)符,而使用空格
    useTabs: false,
    // 行尾需要有分號(hào)
    semi: true,
    // 使用單引號(hào)
    singleQuote: true,
    // 結(jié)尾處不加逗號(hào)
    trailingComma: "none",
    // 對(duì)象的 key 僅在必要時(shí)用引號(hào)
    quoteProps: 'as-needed',
    // jsx 不使用單引號(hào),而使用雙引號(hào)
    jsxSingleQuote: false,
    // 大括號(hào)內(nèi)的首尾需要空格
    bracketSpacing: true,
    // jsx 標(biāo)簽的反尖括號(hào)需要換行
    jsxBracketSameLine: false,
    // 箭頭函數(shù),只有一個(gè)參數(shù)的時(shí)候,也需要括號(hào)
    arrowParens: 'always',
    // 每個(gè)文件格式化的范圍是文件的全部?jī)?nèi)容
    rangeStart: 0,
    rangeEnd: Infinity,
    // 不需要寫(xiě)文件開(kāi)頭的 @prettier
    requirePragma: false,
    // 不需要自動(dòng)在文件開(kāi)頭插入 @prettier
    insertPragma: false,
    // 使用默認(rèn)的折行標(biāo)準(zhǔn)
    proseWrap: 'preserve',
    // 根據(jù)顯示樣式?jīng)Q定 html 要不要折行
    htmlWhitespaceSensitivity: 'css',
    // vue 文件中的 script 和 style 內(nèi)不用縮進(jìn)
    vueIndentScriptAndStyle: false,
    // 換行符使用 lf
    endOfLine: 'lf',
};

最后,增加 git 提交校驗(yàn),安裝依賴(lài)husky和lint-staged,其中,husky用于git 的hook,lint-staged用于針對(duì)暫存的 git 文件運(yùn)行 linters。

在package.json中配置安裝 husky 的命令,以及l(fā)int-staged檢查:

前端工程化:發(fā)布一個(gè)屬于自己的規(guī)范 npm 包執(zhí)行npm run prepare 安裝 husky,并在生成的.husky/pre-commit文件(如果沒(méi)有生成,手動(dòng)創(chuàng)建一個(gè)即可)中添加 npx lint-staged 命令:

All ready!執(zhí)行g(shù)it commit 提交代碼就會(huì)觸發(fā) prettier和eslint自動(dòng)修復(fù)。

配置babel

module.exports = {
  env: {
    test: {
      presets: [
        '@babel/preset-env'
      ]
    },
    build: {
      presets: [
        [
          '@babel/preset-env',
          {
            // rollupjs 會(huì)處理模塊,所以設(shè)置成 false
            modules: false,
            loose: true
          }
        ]
      ]
    }
  }
}

配置rollup

如果開(kāi)發(fā)的是工具包,rollup更適合作為打包工具,如果是組件,比如vue組件,則@vue/cli 的 lib 模式更適合。根據(jù)開(kāi)發(fā)環(huán)境區(qū)分不同的配置并在package.json的script中添加腳本命令,輸出不同規(guī)范的產(chǎn)物:umd、umd.min、cjs、esm。

通用配置rollup.config.base.js

import { nodeResolve } from '@rollup/plugin-node-resolve'; // 解析 node_modules 中的模塊
import commonjs from '@rollup/plugin-commonjs'; // cjs => esm
import alias from '@rollup/plugin-alias'; // alias 和 resolve 功能
import replace from '@rollup/plugin-replace';
import eslint from '@rollup/plugin-eslint';
import { babel } from '@rollup/plugin-babel';
import { terser } from 'rollup-plugin-terser';
import clear from 'rollup-plugin-clear';
import typescript from '@rollup/plugin-typescript';
import json from '@rollup/plugin-json'; // 支持在源碼中直接引入json文件,不影響下面的
import { name as pkgName, version, author } from '../package.json';

const banner = '/*!\n'
  + ` * ${pkgName} v${version}\n`
  + ` * (c) 2023-${new Date().getFullYear()} ${author}\n`
  + ' * Released under the MIT License.\n'
  + ' */';

export default {
  input: 'src/index.ts',
  // 同時(shí)打包多種規(guī)范的產(chǎn)物
  output: [
    {
      file: `lib/${pkgName}.umd.js`,
      format: 'umd',
      name: pkgName,
      banner
    },
    {
      file: `lib/${pkgName}.umd.min.js`,
      format: 'umd',
      name: pkgName,
      banner,
      plugins: [terser()]
    },
    {
      file: `lib/${pkgName}.cjs.js`,
      format: 'cjs',
      name: pkgName,
      banner
    },
    {
      file: `lib/${pkgName}.esm.js`,
      format: 'es',
      banner
    }
  ],
  // 注意 plugin 的使用順序
  plugins: [
    json(),
    clear({
      targets: ['lib']
    }),
    alias(),
    replace({
      'process.env.NODE_ENV': JSON.stringify(
        process.env.NODE_ENV || 'development'
      ),
      preventAssignment: true
    }),
    nodeResolve(),
    commonjs({
      include: 'node_modules/**'
    }),
    typescript(),
    eslint({
      throwOnError: true, // 拋出異常并阻止打包
      include: ['src/**'],
      exclude: ['node_modules/**']
    }),
    babel({ babelHelpers: 'bundled' })
  ]
};

開(kāi)發(fā)環(huán)境配置rollup.config.dev.js

import serve from 'rollup-plugin-serve';
import livereload from 'rollup-plugin-livereload';
import baseConfig from './rollup.config.base';

export default {
  ...baseConfig,
  plugins: [
    ...baseConfig.plugins,
    livereload({
      watch: 'examples/browser'
    }),
    serve({
      port: 8080,
      contentBase: ['lib', 'examples/browser'],
      openPage: 'index.html'
    })
  ]
};

正式環(huán)境配置rollup.config.prod.js

import filesize from 'rollup-plugin-filesize';
import baseConfig from './rollup.config.base';

export default {
  ...baseConfig,
  plugins: [...baseConfig.plugins, filesize()]
};

?添加開(kāi)發(fā)與打包相關(guān)的腳本命令到package.json,借助npm-run-all 依賴(lài),npm run build按順序執(zhí)行z,buildjs,buildts。

前端工程化:發(fā)布一個(gè)屬于自己的規(guī)范 npm 包

添加支持tree shaking 的配置到package.json中。

前端工程化:發(fā)布一個(gè)屬于自己的規(guī)范 npm 包

發(fā)布到npm

編寫(xiě)發(fā)布到npm時(shí)需要忽略的文件與目錄的配置,即.npmignore。

# OSX
.DS_Store

# IDE
.idea

# npm
node_modules

# jest
coverage

# dev
bin
src
scripts
test
.babelrc.js
.eslintrc.js
.eslintignore
.prettierrc.js
.prettierignore
tsconfig.json

#doc
docs
examples

#other
.github
.husky

添加發(fā)布相關(guān)的腳本命令到package.json中,其中 npm --no-git-tag-version version 分別修改版本號(hào)中的major,minor,patch。

前端工程化:發(fā)布一個(gè)屬于自己的規(guī)范 npm 包然后登錄npm官網(wǎng)(npm login --registry https://registry.npmjs.org/),登錄成功后,直接發(fā)布即可(npm publish --registry https://registry.npmjs.org/)。

發(fā)布過(guò)程中常見(jiàn)的報(bào)錯(cuò):

? ? ? ? 1. 400:版本問(wèn)題,修改package.json的version即可;

? ? ? ? 2. 401:npm源設(shè)置成第三方源(淘寶源)的時(shí)候發(fā)生的,比如我們經(jīng)常會(huì)將鏡像源設(shè)置成淘寶源。因此在發(fā)布時(shí),應(yīng)該使用默認(rèn)的npm源登錄,即npm login --registry https://registry.npmjs.org/;

? ? ? ? 3. 403:包名重復(fù),修改包名重新發(fā)布。

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-453857.html

到了這里,關(guān)于前端工程化:發(fā)布一個(gè)屬于自己的規(guī)范 npm 包的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端工程化-VUE

    前端工程化-VUE

    高效的開(kāi)發(fā)離不開(kāi)基礎(chǔ)工程的搭建。本章主要介紹如何使用Vue進(jìn)行實(shí)際SPA項(xiàng)目的開(kāi)發(fā),這里使用的是目前熱門(mén)的JavaScript應(yīng)用程序模塊打包工具Webpack,進(jìn)行模塊化開(kāi)發(fā)、代碼編譯和打包。 Vue腳手架指的是Vue-cli,它是一個(gè)專(zhuān)門(mén)為單頁(yè)面應(yīng)用快速搭建繁雜程序的腳手架,它可以輕

    2024年02月08日
    瀏覽(98)
  • 什么是前端工程化?

    前端工程化是一種思想,而不是某種技術(shù)。主要目的是為了提高效率和降低成本,也就是說(shuō)在開(kāi)發(fā)的過(guò)程中可以提高開(kāi)發(fā)效率,減少不必要的重復(fù)性工作等。 tip 現(xiàn)實(shí)生活舉例 建房子誰(shuí)不會(huì)呢?請(qǐng)幾個(gè)工人一上來(lái)就開(kāi)始弄,在建筑的過(guò)程中缺了材料就叫個(gè)工人去買(mǎi),發(fā)現(xiàn)工期

    2024年02月15日
    瀏覽(97)
  • 前端工程化-NPM

    前端工程化-NPM

    NPM代表npmjs.org這個(gè)網(wǎng)站,這個(gè)站點(diǎn)存儲(chǔ)了很多Node.js的第三方功能包。 NPM的全稱(chēng)是Node Package Manager,它是一個(gè)Node.js包管理和分發(fā)工具,已經(jīng)成為非官方的發(fā)布Node模塊(包)的標(biāo)準(zhǔn)。它可以讓JavaScript開(kāi)發(fā)者能夠更加輕松地共享代碼和共用代碼片段,并且通過(guò)NPM管理需要分享的代

    2024年02月09日
    瀏覽(310)
  • 前端工程化相關(guān)

    前端工程化相關(guān)

    知道軟件包名,拿到源碼或者路徑的方法 在瀏覽器輸入以下內(nèi)容,就可以找到你想要的。。。 unpkg.com/輸入包名 ESM特性清單: 自動(dòng)采取嚴(yán)格模式,忽略“use?strict” 每個(gè)ESM模塊都是單獨(dú)的私有作用域; ESM是通過(guò)CORS去請(qǐng)求外部JS模塊的 ESM的script標(biāo)簽會(huì)延遲執(zhí)行腳本,就要有

    2024年01月17日
    瀏覽(307)
  • Ajax及前端工程化

    Ajax及前端工程化

    Ajax:異步的js與xml。 作用: 1、通過(guò)ajax給服務(wù)器發(fā)送數(shù)據(jù),并獲得其響應(yīng)的數(shù)據(jù)。 2、可以在不更新整個(gè)網(wǎng)頁(yè)的情況下,與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁(yè)的技術(shù)。 ?1、準(zhǔn)備數(shù)據(jù)地址 ?2、創(chuàng)建XMLHttpRequest對(duì)象,用于和服務(wù)器交換數(shù)據(jù) ?3、向服務(wù)器發(fā)送請(qǐng)求 ?4、獲取服務(wù)器響

    2024年02月12日
    瀏覽(35)
  • 前端工程化與webpack

    前端工程化與webpack

    能夠說(shuō)出什么是前端工程化 能夠說(shuō)出webpack的作用 能夠掌握webpack的基本使用 了解常用plugin的基本使用 了解常用loader的基本使用 能夠說(shuō)出Source Map的作用 前端工程化 webpack的基本使用 webpack中的插件 webpack中的loader 打包發(fā)布 Source Map 1.1小白眼中的前端開(kāi)發(fā)vs實(shí)際的前端開(kāi)發(fā) 實(shí)際

    2024年02月13日
    瀏覽(99)
  • 前端工程化知識(shí)系列(9)

    ?? 點(diǎn)贊,你的認(rèn)可是我創(chuàng)作的動(dòng)力! ?? 收藏,你的青睞是我努力的方向! ?? 評(píng)論,你的意見(jiàn)是我進(jìn)步的財(cái)富! 持續(xù)性能監(jiān)控和自動(dòng)化性能優(yōu)化在前端開(kāi)發(fā)中非常重要。以下是一些相關(guān)工具和實(shí)踐: 性能監(jiān)控工具 :工具如Google Lighthouse、WebPageTest、PageSpeed Insights等可以

    2024年02月07日
    瀏覽(103)
  • 前端工程化之模塊化

    前端工程化之模塊化

    前端模塊化是一種標(biāo)準(zhǔn),不是實(shí)現(xiàn) 理解模塊化是理解前端工程化的前提 前端模塊化是前端項(xiàng)目規(guī)?;谋厝唤Y(jié)果 前端模塊化就是將復(fù)雜程序根據(jù)規(guī)范拆分成若干模塊,一個(gè)模塊包括輸入和輸出。而且模塊的內(nèi)部實(shí)現(xiàn)是私有的,它通過(guò)對(duì)外暴露接口與其他模塊通信,而不是直

    2024年02月11日
    瀏覽(1241)
  • 前端工程化之 webpack <一>

    編寫(xiě)的代碼 ==》經(jīng)過(guò)打包工具(glup、rollup、webpack、vite)本身也是js代碼,讀取文件操作的, 依賴(lài)于 node 環(huán)境 = = 》 普通的html 、css 、javascript = = 》 打包到靜態(tài)服務(wù)器 = = 》 跑在用戶(hù)的瀏覽器 用于對(duì)路徑和文件進(jìn)行處理 在 Mac OS、Linux 和 window 上的路徑上是不一樣的,部署的

    2024年01月24日
    瀏覽(107)
  • 前端需要理解的工程化知識(shí)

    前端需要理解的工程化知識(shí)

    1.1 Git 常見(jiàn)工作流程 ?Git 有4個(gè)區(qū)域:工作區(qū)(workspace)、index(暫存區(qū))、repository(本地倉(cāng)庫(kù))和remote(遠(yuǎn)程倉(cāng)庫(kù)),而工作區(qū)就是指對(duì)文件發(fā)生更改的地方,更改通過(guò)git add 存入暫存區(qū),然后由git commit 提交至本地倉(cāng)庫(kù),最后push推送到遠(yuǎn)程倉(cāng)庫(kù)。 工作目錄 包括.git?子目錄(

    2024年02月10日
    瀏覽(98)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包