1. 程式人生 > >Java Maven專案之Nexus私服搭建和版本管理應用

Java Maven專案之Nexus私服搭建和版本管理應用

目錄:

  • Nexus介紹
  • 環境、軟體準備
  • Nexus服務搭建
  • Java Maven專案版本管理應用
  • FAQ

1、Nexus介紹

Nexus是一個強大的Maven倉庫管理器,它極大地簡化了自己內部倉庫的維護和外部倉庫的訪問。利用Nexus你可以只在一個地方就能夠完全控制訪問 和部署在你所維護倉庫中的每個Artifact。我們可以在區域網搭建一個maven私服,用來部署第三方公共構件或者作為遠端倉庫在該區域網的一個代理。

2、環境、軟體準備

本次演示環境,我是在本機mac上操作,以下是我本地軟體及版本:

  1. Nexus:nexus-2.14.4-03
  2. Jdk:1.8.0_91
  3. Maven:3.3.9
  4. Git: 2.10.1
  5. GitLab:8.17.4

注意:Java Maven專案版本管理,這裡我們scm使用git來做版本管理,gitlab作為程式碼儲存,這裡我們忽略Jdk、Maven、Git、GitLab的安裝過程,著重介紹下Nexus的搭建,以及Java Maven專案配置以及版本管理配置。

3、Nexus服務搭建

這裡我們使用Nexus OSS開源版本,官網下載地址:Nexus Repository Manager OSS,這裡我選擇2.x的tag.gz包下載安裝,安裝到我本地/Users/wanyang3目錄下。

1)解壓縮下載包

cd /Users/wanyang3
tar -zxvf
nexus-2.14.4-03-bundle.tar.gz 解壓縮後,會在當前目錄nexus-2.14.4-03-bundle下出現兩個目錄: nexus-2.14.4-03:nexus服務目錄,包括日誌,配置、啟動、應用。 sonatype-work:nexux儲存目錄,下載上傳的各個包存貯在這裡。

2) 修改配置並啟動服務

修改配置:
cd /Users/wanyang3/nexus-2.14.4-03-bundle/nexus-2.14.4-03/conf
vim nexus.properties

說明:該檔案是nexus的配置屬性檔案,application-port預設服務埠8081,因為本地8081
埠已經佔用,所以我們這裡修改為9998,即:application-port=9998,其他配置,如nexus-work、runtime、application-host、nexus-webapp等預設即可。 啟動: cd /Users/wanyang3/nexus-2.14.4-03-bundle/nexus-2.14.4-03/bin ./Nexus start Usage: ./nexus { console | start | stop | restart | status | dump } 注意:若啟動報錯,說沒有許可權啟動,或者讓指定USER時,有兩種方法解決: 1. 使用RUN_AS_USER=root ./Nexus start命令啟動 2. 修改Nexus檔案,設定開啟註釋,並設定RUN_AS_USER=root,以後只需要執行./Nexus start即可。

3)設定Nexus
成功啟動Nexus後,我們可以瀏覽器訪問http://127.0.0.1:9998/nexus/,就可以看到Nexus服務Web管理頁面歡迎頁面了。

nexus

3.1 建立倉庫
點選右上角Log In,輸入使用者名稱和密碼登入,Nexus預設賬戶使用者名稱為admin,密碼為admin123,登入以後,我們現在可以建立一個個人倉庫了。點選左側Repositories,我們可以看到預設的所有的倉庫列表。

這裡寫圖片描述

我們可以看到倉庫型別有四種:

  1. hosted(宿主倉庫):用來部署自己,第三方或者公共倉庫的構件
  2. proxy(代理倉庫):代理遠端倉庫
  3. virtual(虛擬倉庫):預設提供了一個Central M1虛擬倉庫,用來將maven 2適配為maven 1
  4. group(倉庫組):統一管理多個倉庫

這裡我們選擇型別為hosted的建立一個wanyang3的Repositories,注意選擇Deployment Policy時,如果該倉庫多次部署的話,請選擇Allow Redeploy,否則後續部署會報錯。

這裡寫圖片描述

3.2 設定使用者及許可權
點選左側Security—》Users,設定使用者及許可權。
我們可以看到有三個預設的賬號:

  1. Admin(管理員賬號):Nexus管理員許可權,最高許可權,什麼操作都可以做。
  2. Deployment(部署賬號):Nexus部署許可權,以及所有倉庫的CRUDV操作許可權。
  3. Anonymous(匿名賬號):Nexus匿名許可權,以及所有倉庫只讀許可權。

我們正常訪問倉庫的時候,是不需要這三個賬戶的,一般我們會把Deployment賬戶暴漏出來,方便開發或運維部署專案使用,我們可以直接使用該部署賬號,亦可以新建立一個自己的賬號資訊,通過Add Role Management來控制該賬號的許可權。

這裡寫圖片描述

注意:這裡要記住設定的使用者名稱和密碼,下邊配置Maven Setting.xml的時候配置使用者名稱和密碼資訊。

Java Maven專案版本管理應用

一、Java Maven專案基本配置

我們先來看一個最基礎的pom.xml檔案,我們要達到的目的是,讓我們依賴的jar包,從我們剛配置的Nexus私服上拉取和儲存。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.wanynag3.efp</groupId>
  <artifactId>efp_demo</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>efp_demo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.3.2.RELEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.10</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.10</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
  </dependencies>

  <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
        <finalName>efp_demo</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

從pom檔案可以看出來,這個Maven專案是一個很常見的SpringMVC專案,我們想讓他依賴剛搭建的Nexus私服,那麼需要修改Maven的setting.xml的mirrors節點。

<mirrors>
    <mirror>
        <id>default</id>
        <mirrorOf>*</mirrorOf>
        <name>default maven nexus mirror</name>
        <url>http://127.0.0.1:9998/nexus/content/groups/public</url>
    </mirror>
</mirrors>

說明:這裡mirror表示映象庫,指定庫的映象,也就是覆蓋中央倉庫的預設地址,這裡<mirrorOf>*</mirrorOf>表示為所有的倉庫做映象,也可以指定某個或某幾個倉庫做映象,如central庫。

修改完成之後,以後我們修改或新增dependency時,都會先從本地私服拉取,如果沒有則去中央倉庫拉取並快取到私服,下次使用就可以直接從本地私服拉取,速度就快的多啦!

二、Java Maven專案版本管理

我們先來了解一下Maven專案從1.0.0-SNAPSHOT到1.0.0(Release)在到1.0.1-SNAPSHOT的過程:

  1. 更新pom版本從1.0.0-SNAPSHOT到1.0.0
  2. 對該版本打一個1.0.0 tag推送到Git/SVN
  3. 針對該tag,執行mvn deploy,釋出1.0.0正式版本,推送Maven倉庫
  4. 更新pom版本從1.0.0到1.0.1-SNAPSHOT

整個過程,是通過Maven外掛maven-release-plugin來實現,該外掛可以幫我們升級pom版本號,打tag並提交到scm,以及提交到Nexus倉庫,我們需要配置下pom.xml。

1、增加scm配置
<scm>
    <connection>scm:git:http://git.xx.xx.com/e_flows/efp_demo.git</connection>
    <developerConnection>scm:git:http://git.xx.xx.com/e_flows/efp_demo.git</developerConnection>
    <url>scm:git:http://git.xx.xx.com/e_flows/efp_demo.git</url>
</scm>

2、在plugins下增加plugin
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.3</version>
    <configuration>
        <tagNameFormat>[email protected]{project.version}</tagNameFormat>
    </configuration>
</plugin>

說明:
    1. scm配置,配置該專案的git或svn地址,maven-release-plugin外掛會幫我們完成一系列git或svn操作,如提交、打tag等,這裡我使用gitlab作為程式碼管理,所以需要提前安裝好git和gitlab,否則maven執行會報錯。
    2. maven-release-plugin外掛,tagNameFormat預設取artifactId-version作為tag的名稱,我們也可以指定tag的格式,例如這裡我指定以v開頭+pom中的version欄位(v1.0.0),可以用[email protected]{project.version}。

好了,我們現在開始使用外掛執行版本管理了。

首先,我們來執行命令mvn release:prepare,執行過程中,我們會看到這樣的輸出提示:

1. What is the release version for "efp_demo"? (com.wanynag3.efp:efp_demo) 1.0.0: :
--意思是你想要將efp_demo釋出為什麼版本,預設是1.0.0(按照pom中version走的),如果想釋出為其他版本號,可以在:後邊輸入其他版本號。

2. What is SCM release tag or label for "efp_demo"? (com.wanynag3.efp:efp_demo) v1.0.0: :
--意思是你想要將efp_demo釋出為什麼tag標籤,預設是v1.0.0(這裡我們在pom中設定tagNameFormat起作用啦!),如果想釋出其他tag標籤,可以在:後邊輸入其他tag。

3. What is the new development version for "efp_demo"? (com.wanynag3.efp:efp_demo) 1.0.1-SNAPSHOT: :
--意思是你想要為efp_demo設定為什麼新的開發版本,預設是1.0.1-SNAPSHOT(預設在原版本+1),如果想設定為其他版本,比如升版本1.1.0,可以在:後邊輸入版本號。

執行完畢之後,在Gitlab中該專案對應倉庫中tag中,就可以看到maven-release-plugin剛剛打的v1.0.0的tag,同時可以看到pom.xml中版本自動升級為1.0.1-SNAPSHOT。

這裡寫圖片描述

然後,我們需要將efp_demo:1.0.0正式版本釋出到我們私服中,我們還需要修改一下pom.xml以及setting.xml,配置repository和snapshotRepository倉庫地址,Server認證資訊等。

1、Maven setting.xml中設定server
<servers>
    <server>
      <id>wanyang3.release</id>
      <username>wanyang3</username>
      <password>******</password>
    </server>
    <server>
      <id>wanyang3.snapshot</id>
      <username>wanyang3</username>
      <password>******</password>
    </server>
</servers>

2、pom.xml中新增distributionManagement
<distributionManagement>
    <repository>
        <id>wanyang3.release</id>
        <name>Internal Release Repository</name>
        <url>http://127.0.0.1:9998/nexus/content/repositories/releases</url>
        <uniqueVersion>true</uniqueVersion>
    </repository>
    <snapshotRepository>
        <id>wanyang3.snapshot</id>
        <name>Internal Snapshot Repository</name>
        <url>http://127.0.0.1:9998/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>

注意:
    1. repository下的id,必須跟Maven setting.xml中server下的id保持一致,我們上邊新增的的Nexus賬號wanyang3,是具有Deployment許可權的,這個地方有許可權驗證,使用者名稱密碼不對,deploy時會認證不通過。
    2. repository和snapshotRepository的url一個是正式releases地址,一個是快照snapshots地址,這裡我們用Nexus預設地址,也可以改為自己新建的releases和snapshots地址。

接著,我們執行命令mvn release:perform,執行過程中,我們看到如下輸出,則說明deploy成功:

[INFO] Uploading: http://127.0.0.1:9998/nexus/content/repositories/releases/com/wanynag3/efp/efp_demo/1.0.0/efp_demo-1.0.0.war
......
[INFO] Uploaded: http://127.0.0.1:9998/nexus/content/repositories/releases/com/wanynag3/efp/efp_demo/1.0.0/efp_demo-1.0.0.war (6562 KB at 34717.1 KB/sec)
[INFO] Uploading: http://127.0.0.1:9998/nexus/content/repositories/releases/com/wanynag3/efp/efp_demo/1.0.0/efp_demo-1.0.0.pom
......
Uploaded: http://127.0.0.1:9998/nexus/content/repositories/releases/com/wanynag3/efp/efp_demo/1.0.0/efp_demo-1.0.0.pom (4 KB at 244.6 KB/sec)
......

該過程,maven-release-plugin會自動幫我們簽出剛才打的v1.0.0 tag,然後打包,最後上傳到私服Maven倉庫中指定位置。好了到這裡,整個版本的升級,打標籤,釋出等工作全部完成。我們可以在私服Maven倉庫中看到正式釋出的1.0.0版本啦!

這裡寫圖片描述

至此,Maven專案版本自動化管理就完成了。

FQA

  1. 執行mvn release:prepare報錯 [Cannot prepare the release because …]:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project qd_api: Cannot prepare the release because you have local modifications : 
    [ERROR] [pom.xml:modified]

    這個報錯,是因為本地有程式碼修改未提交,必須先提交修改之後,在執行該命令。

  2. 執行mvn release:prepare報錯 [Unable to commit files…]:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project efp_demo: Unable to commit files
    [ERROR] Provider message:
    [ERROR] The git-push command failed.
    [ERROR] Command output:
    [ERROR] remote: HTTP Basic: Access denied
    [ERROR] fatal: Authentication failed for 'http://git.xx.xx.com/e_flows/efp_demo.git/'

    這個報錯,是因為在執行git相關操作時,Gitlab認證失敗,請檢查一下git使用者名稱和密碼。

  3. 執行mvn release:perform報錯 [Deployment failed: repository element was …]:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project efp_demo: Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter -> [Help 1]

    這個報錯,是因為pom.xm中沒有配置distributionManagement相關資訊,我們可以在pom中增加distributionManagement資訊,或者在命令後追加-DaltDeploymentRepository=id::layout::url

  4. 執行mvn release:perform報錯 [Failed to deploy artifacts: Could not transfer …]:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project efp_demo: Failed to deploy artifacts: Could not transfer artifact com.wanyang3.efp:efp_demo:war:1.0.0 from/to wanyang3.default (http://127.0.0.1:9998/nexus/content/repositories/releases): Failed to transfer file: http://127.0.0.1:9998/nexus/content/repositories/releases/com/wanyang3/efp/efp_demo/1.0.0/efp_demo-1.0.5.war. Return code is: 401, ReasonPhrase: Unauthorized.

    這個報錯,是因為deploy時認證失敗,首先在確保Maven setting.xml中server配置的使用者名稱密碼正確的情況下,檢查server id跟pom.xml中repository id是否一致。

  5. 執行mvn release:perform報錯 [Request Entity Too Large …]:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project multimedia-web: Failed to deploy artifacts: Could not transfer artifact  Return code is: 413, ReasonPhrase: Request Entity Too Large.

    這個報錯,是因為我們nginx代理預設客戶端最大允許body的size太小導致(預設2M),需要修改nginx.conf中proxy部分:client_max_body_size 500M

  6. 執行mvn release:perform報錯 [MavenReportException: Error while generating …]:

    [INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.4:jar (attach-javadocs) on project efp_demo: MavenReportException: Error while generating Javadoc:
    [INFO] [ERROR] Exit code: 1 - /Users/wanyang3/git/e_flows/efp_demo/target/checkout/src/main/java/com/wanyang3/efp/efp_demo/controller/CommonController.java:25: 警告: mailTo沒有 @param

    這個報錯,是因為我使用的jdk8,執行mvn clean install編譯是能通過,但是執行該命令時一直報Javadoc的錯誤,後來google查詢了下,需要增加一個maven-javadoc-plugin外掛可解決。

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
            <additionalparam>-Xdoclint:none</additionalparam>
        </configuration>
    </plugin>

參考資料:

相關推薦

Java Maven專案Nexus搭建版本管理應用

目錄: Nexus介紹 環境、軟體準備 Nexus服務搭建 Java Maven專案版本管理應用 FAQ 1、Nexus介紹 Nexus是一個強大的Maven倉庫管理器,它極大地簡化了自己內部倉庫的維護和外部倉庫的訪問。利用Nexus你可以只

ava Maven項目Nexus搭建版本管理應用

max 權限 環境 val 導致 type www. exit frame 目錄: Nexus介紹 環境、軟件準備 Nexus服務搭建 Java Maven項目版本管理應用 FAQ 1、Nexus介紹 Nexus是一個強大的Maven倉庫管理器,它極大地簡化了自己內部

MavenNexus

Nexus簡介 Nexus 是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫 下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫伺服器,在代理遠端倉庫的同時維護本地倉庫,以節省頻寬和時間,Nexus就可以滿足這樣的需要。

大資料平臺搭建nexus

Steps for installing Nexus repository manager in RedHat machine 1.  Downloading  Nexus  Nexus Open Source distribution was used for this installation tes

MyEclipse 配置maven專案pom.xml設定 上傳專案nexus,通過中轉倉庫下載外掛,以及nexus的配置

1。安裝官方nexus的開源版本 下載安裝可以參照http://www.th7.cn/system/win/201609/179882.shtml 因為不是專業版本,有好多功能限制,不過個人用用夠了。 2。安裝maven 配置相對簡單:官方下載後解壓到安裝目錄即可。再在

Maven學習筆記二:Nexus搭建

Nexus是一種流行的Maven遠端倉庫,我們知道Maven一般有兩種倉庫,本地倉庫和遠端倉庫,中央倉庫是Maven自帶的遠端倉庫,除了中央倉庫之外,還存在許多特殊的遠端倉庫,私服便是一種特殊的遠端倉庫,使用私服的好處不言而喻:原本我們直接跟中央倉庫溝通的,現在在中間加入了

Centos7.0下Nexus搭建

load 11.2 AD 下載 work tps class ash bundle 1.下載nexus wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.11.2-03-bundl

SuSEGitlab搭建

admin apache tar fff mar b- option ext chang Gitlab私服搭建 Ps:由於是內網使用不存在郵件派發,不配置郵件,且無需異步服務器代理轉發 直接過程: 1、下載bitnami-gitlab-8.9.6-0-linux-x64-i

Maven 搭建使用

一、下載安裝 1. 私服下載地址  https://www.sonatype.com/download-oss-sonatype 2.下載完成後解壓任意目錄,我的是D:\soft\nexus2\nexus-2.14.8-01 3.安裝  在D:\soft\

Nexus搭建及其核心功能

1、私服的使用場景    1)、公司不能連線公網,可以用一個私服務來統一連線    2)、公司內部jar 元件的共享 2、nexus下載與安裝    1)、下載nexus(nexus下載)    2)、解壓並設定環境變數 #解壓 tar -zxvf nexus-2.14.

精簡nexus搭建

  maven對專案原始碼和依賴管理的好處不言而喻,不過所依賴倉庫都是外網那些常用提供的倉庫地址,基於安全,當外網環境有限制,或私有共通jar需共享時,則會需要搭建內部私服,以下說明基於Linux環境。   1. maven 安裝   安裝很簡單,主要就幾個步驟和設定。   a.  w

nexus 搭建配置,並將自定義的jar釋出到

一、前言   為什麼要在本地開發機器上安裝nexus?首先宣告公司內部是有自己的nexus倉庫,但是對上傳jar包做了限制,不能暢快的上傳自己測試包依賴。於是就自己在本地搭建了一個nexus私服,即可以使用公司nexus私服倉庫中的依賴,也可以上傳和使用自己的測試包依賴。 二、nexus下載

maven搭建使用(初級篇)

為什麼要用遠端倉庫(私服)  如果沒有私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的maven倉庫下載到本地,而一個團隊中的所有人都重複的從maven倉庫下載構件,這樣就加大了中央倉庫

Nexus搭建及本地jar管理

環境準備與搭建 本地需要首先搭建好maven環境,在此基礎之上 下載nexus的檔案到本地,解壓後如圖顯示 修改nexus的配置檔案D:\worksoftware\nexus\nexus-2.11.4-01\conf\nexus.properties

Linux nexus 搭建

sysconf default 防火墻 pre prope .so zxvf def har 下載nexushttps://www.sonatype.com/download-oss-sonatype 上傳到服務器/opt/ 解壓 tar -zxvf nexus-3.14.

Nexus搭建及settings.xml配置詳細教程

配置: centos 7 安裝流程如下: # useradd nexus # passwd nexus $ su nexus $ cd $ wget nexus-3.12.1-01-unix.tar.gz && mkdir nexus3

eclipse中釋出專案nexus

1.根據maven專案pom.xml檔案中 <!-- 配置遠端釋出到私服,mvn deploy --> <distributionManagement> <repository>

配置兩臺電腦maven共用一個nexus

       雖然最近一直在用maven,但是由於學校網速尚可,所以對私服的需求不不高,所以一直都沒有搭建過nexus。現在新買了一臺筆記本,覺得剛好可以搭建個私服,給兩臺電腦的maven都可以使用到nexus。順便學習下如何搭建nexus。       具體操作如下:

Nexus搭建

    Maven搭建眾所周知, 是一個很好的專案管理工具,預設情況下,我們下載第三方元件都是從MAVEN官網下載的。但是並不是所有的三方元件都可以在MAVEN官網找到,比如我們專案組自己內部的一些元件,可能要放在一個區域網伺服器上,並且向結合MAVEN使用,這時候我們就要

cnpm搭建發布包

block 郵箱 講解 cnp log 默認 info pos body cnpm 1.cnpm就是淘寶做的一個npm鏡像,定期更新npm包,就是方便墻內的人。此外還可以用它搭建企業內部的npm私服。比如一些企業內部的包不能公開,還有想進行版本管理等等,就很方便。