「原創」如何高效管理你的js代碼

2021-01-08 酷扯兒

本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫

1.為什麼需要管理好js代碼

1.1 你有遇到這些情況嗎

其他項目使用自己慢慢豐富的工具類,你是copy過去的?難免需要刪除整個node_modules並重裝依賴庫,你會因為重寫過某些庫的代碼而糾結?其他人協作開發時,你重寫的庫別人拉不到或者需要手動或者跑腳本來同步?你發現你的工具類有某個較大錯誤,而那麼多項目都依賴了?就像你有時看著鏡子裡的自己感慨造物之美的時候,你覺得你開發的工具真的好用,想有人使用並給你讚美的時候,你不知道怎麼讓別人用?1.2 那管理好js代碼的好處至少就有以下

為了代碼復用可以只用一行代碼,獲取即用當你需要用別人的庫且需要重寫一部分代碼的時候散播自己的光輝,假如自己是金子2.那如何管理js代碼呢——發布npm庫

2.1 首先你要有個npm帳號

進入npm官網(https://www.npmjs.com/)

要填寫Name,Email,Username, Password2.2 配置終端

~ npm adduser

Username: ranran_2

Password:

Email: (this IS public) 546910852@qq.com

Logged in as ranran_2 on https://registry.npmjs.org/.

~ npm whoami

ranran_2

npm adduser 使用此命令登錄終端,依次輸入在npm官網註冊的帳號、密碼和郵箱npm whoami 查看當前登錄的用戶npm logout 退出登錄2.3 發布自己的npm庫

以下以一個react-native的工具庫rncommon為例

例子為rn,是因為最後總有一個環境使用我們發布的庫,我們的庫需要使用該開發環境的api來寫,但最後發布庫的時候我們只保留我們自己寫的工具即可。發布流程對於所有js代碼是一致的。

2.3.1 初始化工程,目錄如下

2.3.2 寫將要發布的庫的內容

在根目錄添加目錄common在目錄下新建MyFlatList.js,封裝下常用的列表控制項。index.js,用於導出控制項導入測試完控制項,就可以準備發布了

import MyFlatList from './common'

const App: () => React$Node = () => {

return (

<>

<StatusBar barStyle="dark-content"/>

<SafeAreaView>

<MyFlatList

renderItem={renderItem}

refreshing={false}

data={['a','b']}

/>

</SafeAreaView>

</>

);

};

當前目錄如下

2.3.3 初始化庫發布基本文件

在終端進入

目錄,輸入

npm init

common npm init

This utility will walk you through creating a package.json file.

It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields

and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and

save it as a dependency in the package.json file.

Press ^C at any time to quit.

package name: (common) react-native-fastcommon

version: (1.0.0)

description: commonly used widget&util for rn

entry point: (index.js)

test command:

git repository:

keywords: recat-native common util widget

author: ran

license: (ISC)

About to write to /Users/chenweicheng/git/reactnative/rncommon/common/package.json:

{

"name": "react-native-fastcommon",

"version": "1.0.0",

"description": "commonly used widget&util for rn",

"main": "index.js",

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1"

},

"keywords": [

"recat-native",

"common",

"util",

"widget"

],

"author": "ran",

"license": "ISC"

}

Is this OK? (yes) yes

命令用於初始化,生成 package.json 文件package name 安裝這個npm庫時的名字,引用模塊,具體可看下文使用version 版本號,初次發布直接回車即可,更新則需使版本號大於上次版本description 庫描述entry point 入口文件,默認,也可以填其他目錄裡的文件名test command 直接回車默認即可git repository: 庫的代碼倉庫位置keywords: 庫關鍵詞author: ran 你的大名license: (ISC) 直接回車默認即可最後一步會預覽整個

package.json

文件,沒問題直接 輸入

yes

即可;如果需要修改上面內容,打開文件直接修改即可。

2.3.4 發布庫

common npm publish

npm notice

npm notice react-native-fastcommon@1.0.0

npm notice === Tarball Contents ===

npm notice 334B package.json

npm notice 87B index.js

npm notice 1.8kB MyFlatList.js

npm notice === Tarball Details ===

npm notice name: react-native-fastcommon

npm notice version: 1.0.0

npm notice package size: 1.0 kB

npm notice unpacked size: 2.3 kB

npm notice shasum: c4dbbd642a7485de2cbdef19ba873759bfec5403

npm notice integrity: sha512-yFgcmcwjbDgDO[...]Ak0SpuWI8yptw==

npm notice total files: 3

+ react-native-fastcommon@1.0.0

2.3.5 自己安裝庫測試使用

回到項目根目錄,使用npm install --save 加你的npm庫名(package.json的name)安裝庫,安裝成功如下:

common cd ..

rncommon npm install --save react-native-fastcommon

npm WARN @typescript-eslint/eslint-plugin@1.13.0 requires a peer of eslint@^5.0.0 but none is installed. You must install peer dependencies yourself.

npm WARN @typescript-eslint/parser@1.13.0 requires a peer of eslint@^5.0.0 but none is installed. You must install peer dependencies yourself.

npm WARN eslint-plugin-react@7.12.4 requires a peer of eslint@^3.0.0 || ^4.0.0 || ^5.0.0 but none is installed. You must install peer dependencies yourself.

npm WARN eslint-plugin-react-native@3.6.0 requires a peer of eslint@^3.17.0 || ^4 || ^5 but none is installed. You must install peer dependencies yourself.

npm WARN tsutils@3.17.1 requires a peer of typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta but none is installed. You must install peer dependencies yourself.

added 1 package from 1 contributor and audited 951428 packages in 8.888s

found 0 vulnerabilities

引用庫

import MyFlatList from './common' //這個是之前本地文件的引用

改成

import MyFlatList from 'react-native-fastcommon' //這個是通過安裝的引用

測試成功,和引用本地是不是一樣呢至此,你的第一個庫發布成功,萬事開頭難,恭喜你踏出第一步。

3.你可能會遇到的問題

1、

common npm publish

npm ERR! Darwin 16.4.0

npm ERR! argv "/usr/local/Cellar/node/7.5.0/bin/node" "/usr/local/bin/npm" "publish"

npm ERR! node v7.5.0

npm ERR! npm v4.1.2

npm ERR! code ENEEDAUTH

npm ERR! need auth auth required for publishing

npm ERR! need auth You need to authorize this machine using `npm adduser`

npm ERR! Please include the following file with any support request:

npm ERR! /Users/chenweicheng/git/reactnative/MyNpm/android/react-native-ble/npm-debug.log

解決方法:按以上註冊npm帳號和配置終端操作

2、

npm notice react-native-common@1.0.0

npm notice 330B package.json

npm notice name: react-native-common

npm notice shasum: 0cd0e980d78ac30b312a104dd9d5894f7a1617e2

npm notice integrity: sha512-rDaR9EgiiijP+[...]/Kc9Nd/9Pw2XA==

npm ERR! publish Failed PUT 403

npm ERR! code E403

npm ERR! You do not have permission to publish "react-native-common". Are you logged in as the correct user? : react-native-common

npm ERR! A complete log of this run can be found in:

npm ERR! /Users/chenweicheng/.npm/_logs/2019-11-15T09_46_51_491Z-debug.log

解決方法:使用的庫的名字已被使用(package.json 中name欄位為npm庫唯一),修改package.json的name欄位即可

3、

npm ERR! you must verify your email before publishing a new package: https://www.npmjs.com/email-edit : react-native-fastcommon

npm ERR! /Users/chenweicheng/.npm/_logs/2019-11-15T09_49_45_472Z-debug.log

解決方法:該帳號需要驗證郵箱,打開https://www.npmjs.com/email-edit 登錄後按提示郵箱驗證即可

4、

npm ERR! You cannot publish over the previously published versions: 1.0.0. : react-native-fastcommon

npm ERR! /Users/chenweicheng/.npm/_logs/2019-11-15T10_16_43_432Z-debug.log

解決方法:因為之前已經發布過此模塊的這個版本,修改提高package.json的version欄位

5、

npm WARN adduser Incorrect username or password

npm WARN adduser You can reset your account by visiting:

npm WARN adduser

npm WARN adduser https://npmjs.org/forgot

npm ERR! argv "/usr/local/Cellar/node/7.5.0/bin/node" "/usr/local/bin/npm" "adduser"

npm ERR! code E401

npm ERR! unauthorized Login first: -/user/org.couchdb.user:ranran_2/-rev/undefined

npm ERR!

npm ERR! If you need help, you may report this error at:

npm ERR! <https://github.com/npm/npm/issues>

npm ERR! /Users/chenweicheng/npm-debug.log

解決方法:假如是帳號和密碼錯誤,找回帳號密碼即可。假如確認帳號密碼無誤。則按如下處理:If you have registered on https://www.npmjs.com/ and are sure that your username and password is correct, delete $HOME/.npmrc and try adduser again.This may be caused by a bug recorded here: https://github.com/npm/npm/issues/6545 (來自 http://stackoverflow.com/questions/38634586/npm-adduser-incorrect-username-or-password)

6、若遇到和問題5一樣的情況,但用問題5解決方法無法解決,那有可能是設置鏡像如淘寶鏡像等,解決方法如下:命令行中輸入:npm install -g nrm,安裝nrm模塊。

nrm ls 可以列出現在可以切換的npm倉庫源。我的如下:

* npm ---- https://registry.npmjs.org/

cnpm --- http://r.cnpmjs.org/

taobao - https://registry.npm.taobao.org/

nj https://registry.nodejitsu.com/

rednpm - http://registry.mirror.cqupt.edu.cn/

npmMirror https://skimdb.npmjs.com/registry/

edunpm - http://registry.enpmjs.org/

例如nrm use taobao,則是使用taobao鏡像,我們切回默認的npm,nrm use npm即可解決問題了

相關焦點

  • 如何利用TensorFlow.js部署簡單的AI版「你畫我猜」圖像識別應用
    作者使用谷歌 Colab 來訓練模型,並使用 TensorFlow.js 將它部署到瀏覽器上。代碼和 demodemo 地址:https://zaidalyafeai.github.io/sketcher/代碼地址:https://github.com/zaidalyafeai/zaidalyafeai.github.io/tree/master/sketcher請通過以下連結在谷歌 Colab 上測試自己的 notebook:https://colab.research.google.com
  • 教程 | 如何利用TensorFlow.js部署簡單的AI版「你畫我猜」圖像識別應用
    作者使用谷歌 Colab 來訓練模型,並使用 TensorFlow.js 將它部署到瀏覽器上。代碼和 demodemo 地址:https://zaidalyafeai.github.io/sketcher/ 代碼地址:https://github.com/zaidalyafeai/zaidalyafeai.github.io/tree/master
  • JS+Canvas 帶你體驗「偶消奇不消」的智商挑戰
    層疊拼圖Plus 微信小遊戲採用js+canvas實現,沒有使用任何遊戲引擎,對於初學者來說,也比較容易入門。接下來,我將通過以下幾個點循序漸進的講解層疊拼圖Plus 微信小遊戲的實現。如何解決 Canvas 繪圖模糊?
  • 前端工程化以及如何通過Node.js中babel來編譯es6模塊化代碼
    模塊化就是把單獨的一個功能封裝到一個模塊(文件)中,模塊之間相互隔離,但是可以通過特定的接口公開內部成員,也可以依賴別的模塊模塊化開發的好處:方便代碼的重用,從而提升開發效率,並且方便後期的維護一開始模塊化規範有哪些?
  • 亞馬遜推出Honeycode,零代碼即可開發軟體
    如果你知道如何操作電子表格,並且想將其轉換成 app,那麼你就會需要 Honeycode。亞馬遜副總裁 Augustin 表示:開發這項服務旨在將亞馬遜提供的開發功能擴展到客戶群中的更多用戶。他說:「我們經常聽到客戶提及他們想解決的問題,他們很樂意讓他們的 IT 團隊或者其他團隊,甚至是外包團隊,來幫助解決這些問題,構建應用程式。
  • 從Rust到遠方:ASM.js星系
    這篇博客文章是這一系列解釋如何將Rust發射到地球以外的許多星系的文章的一部分:前奏,WebAssembly 星系ASM.js星系(當前這一集)C 星系PHP星系,以及NodeJS 星系Rust解析器將要探索的第二個星系是ASM.js。
  • 「推薦」Billfish免費好用的圖片管理軟體
    作為一名Designer,相信我們都有一件必做的事情:「整理電腦上的素材」。 如日常工作中因為某個項目所收集的圖片,或是平時逛設計網站所採集的靈感圖片,又或者來自好友分享的源文件等等,數量少時還可以通過文件夾分類來進行管理,但是當收集的素材累積到一定量後就變得非常難以整理了。本文將給大家介紹一款高效免費的圖片整理神器Billfish,來快速整理你的素材。
  • 你會用印象筆記,打造「知識管理+行動系統」的第二大腦嗎?
    今天,我們邀請@歡喜老師,來給你分享如何用印象筆記打造「知識管理+行動系統」第二大腦的方法,讓知識原料成為知識資產,讓行動效率快如閃電。    所以我的這張表,會圍繞「核心一件事」及產出作品來展開。
  • 生成Python函數一半沒問題,當前最「正統」的代碼生成是什麼樣?
    通過注釋,我們能知道這段代碼幹了什麼,甚至很自然地想到「如果是我,這段代碼該怎麼寫」。通過閱讀代碼,我們能沿著開發者的思路走一遍,總結出它到底幹了什麼。這兩者似乎是一種對偶關係,從代碼到注釋、從注釋到代碼,這就是代碼生成與代碼總結兩大任務。
  • 如何使用 Julia 語言實現「同態加密+機器學習」?
    一般可以通過自助法(bootstrapping),將「有限」同態轉換為「全」同態,但這個問題已經超過了本文所討論的內容。全同態加密是最近的研究,Craig Gentry 在 2009 年發表了第一個可行(但不實際)的方。現在陸續出現了一些更新也更實際的 FHE 方案。更重要的是,還有一些可以高效地實現這一方案的軟體包。
  • 如何用「邊寫邊搜」寫論文?
    從閱讀到寫作,如何用 邊寫邊搜打造你專屬的 高效 文獻閱讀和論文寫作系統?邊寫邊搜是致力於成就效率愛好者的一款知識服務工具,提供 資料管理、聚合搜索、在線閱讀、一鍵引用、筆記摘錄、模版管理、協同創作、報告加速 等功能。「在線精讀」是一款基於雲服務的分屏閱讀和筆記應用,邊讀資料邊做筆記,打造個人專屬的高倍速閱讀理解體系。
  • 關於TensorFlow,你應該了解的9件事
    谷歌開發技術推廣工程師 Laurence Moroney 在 Google Cloud Next 大會上進行了一段 42 分鐘的演講,主題是「What's New with TensorFlow?」。本文作者 Cassie Kozyrkov 對該演講進行了總結,概括出關於 TensorFlow 的九件事。
  • AI「幹掉」程式設計師後,又對藝術家下手了
    因為人們發現有了這些神經網絡,就能通過自然語言操縱視覺概念,比如,你輸入「一把牛油果造型的扶手椅」,它們就能通過圖像合成,「憑空捏造」出一系列的目標圖像。什麼是人工智慧的未來?《麻省理工科技評論》認為就是「那把牛油果造型的扶手椅」,因為 AI 又往「構建多模態 AI 系統」這個長期目標又邁近了一大步。
  • 一針重複 2 萬億段代碼,我「逆向工程」了輝瑞疫苗!
    ,[20,"\n","24:\"ZGRy\""],[20,"\n","24:\"ujmR\""],[20,"你為什麼要這麼做?如上所述,我們的免疫系統會對「外源性」RNA進行攻擊,為了逃避檢測,RNA中的「U」已經被ψ所取代了。"]
  • 斯坦福「最慘」在讀博士教你如何直面失敗
    這些「失敗」,全都是來自史丹福大學視覺與學習實驗室的在讀博士 Andrey Kurenkov 親身經歷過的事。最近,這位來自頂級學府,人工智慧著名學者李飛飛領導實驗室門下的博士生推出了一系列視頻,希望向人們講述讀博會遇到的種種挫折。當然,還有如何才能避開這些坑。
  • 「大眾點評點餐」小程序開發經驗07:發布與推廣
    文|李超李超,美團點評前端開發工程,2年工作經驗,主要負責「點評點餐」web版、「點評點餐」微信小程序開發。知曉程序(微信號zxcx0101)分享的「大眾點評小程序開發經驗」系列文章,都在介紹如何開發微信小程序。在這篇文章裡,我們主要介紹發布、運維和推廣的細節,讓大家對小程序開發的整體流程有更全面的認識。
  • 包學包會,這些動圖和代碼讓你一次讀懂「自注意力」
    BERT 及其多種變體已經在多種語言理解任務上取得了非常出色的表現,這些架構全都基於 Transformer,而 Transformer 又使用了一種名為「自注意力」的方法。 本文將通過圖示和代碼對自注意力機制進行透徹的解讀。 當然,在閱讀本文之前,你可能也想了解什麼是注意力機制。
  • 4種可用於組織大型Vue.js項目的最佳實踐
    ></class-name></demo-content>你可以在Vue項目中使用多種不同類型的slots。但最重要的一點是,當slots在增多時,項目也會隨之受到巨大的影響,slots可以使得整個項目中的代碼維持完整且易於理解。
  • PyTorch最佳實踐,教你寫出一手風格優美的代碼
    繼承 nn.Module 的類必須擁有一個「forward」方法,它實現了各個層或操作的前向傳導。 一個 nn.module 可以通過「self.net(input)」處理輸入數據。在這裡直接使用了對象的「call()」方法將輸入數據傳遞給模塊。