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

npm pack 命令生成離線npm模塊/npm依賴包

這篇具有很好參考價值的文章主要介紹了npm pack 命令生成離線npm模塊/npm依賴包。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

環(huán)境

node v16.10.0 npm v8.3.0

在使用npm管理第三方模塊時,這些模塊通常會被安裝在 node_modules 目錄下。當(dāng)我們需要把模塊給其他小伙伴或者搭建npm私服時,需要將node_modules 的所有模塊生成N個packname-version.tgz文件,方便其他小伙伴使用npm install packname-version.tgz命令安裝或者使用npm publish packname-version.tgz命令發(fā)布到私服時,這個nodejs腳本或許對你有一些幫助??。

下面是實現(xiàn)這一功能的腳本,具體實現(xiàn)過程如下:

1. 遍歷目錄,查找所有的package.json文件

首先,我們需要遍歷node_modules 目錄,查找所有的 package.json 文件,這里我們使用遞歸實現(xiàn)。

function findPackageJson(directory) {
  const results = [];
  const files = fs.readdirSync(directory);
  for (const file of files) {
    const filePath = path.join(directory, file);
    const stat = fs.statSync(filePath);
    if (stat.isDirectory()) {
      results.push(...findPackageJson(filePath));
    } else if (file === "package.json") {
      results.push(filePath);
    }
  }
  return results;
}

2. 執(zhí)行 npm pack 命令,生成 .tgz 文件

接下來,我們需要執(zhí)行 npm pack 命令,生成一個壓縮文件,這里我們使用 child_process 模塊的 exec 方法來執(zhí)行命令。

function packModule(moduleDir) {
  return new Promise((resolve, reject) => {
    exec("npm pack", { cwd: moduleDir }, (err, stdout, stderr) => {
      if (err) {
        reject(err);
      } else {
        const tgzFile = path.join(moduleDir, `${stdout.trim()}`);
        resolve(tgzFile);
      }
    });
  });
}

在執(zhí)行完 npm pack 命令后,會在當(dāng)前目錄下生成一個以模塊名為前綴的壓縮文件,例如:lodash-4.17.21.tgz。

3. 移動 .tgz 文件到 packs 目錄

最后,我們需要將生成的壓縮文件移動到指定的目錄下,這里我們使用 fs 模塊的 renameSync 方法實現(xiàn)。

function moveTgzFile(tgzFile) {
  const fileName = path.basename(tgzFile);
  const destFile = path.join(packsDir, fileName);
  fs.renameSync(tgzFile, destFile);
  console.log(`Moved ${fileName} to ${destFile}`);
}

將以上三個步驟結(jié)合起來,就可以實現(xiàn)將所有依賴包打包成壓縮文件,并將其移動到指定目錄下的功能了。

完整代碼

// 根據(jù) node modules下的依賴 利用npm pack 命令生成xxx.tgz依賴包 并放在packs目錄下
const fs = require("fs");
const path = require("path");
const { exec } = require("child_process");

// C:\Users\Lenovo\Desktop\pack\node_modules
const modulesDir = path.join(__dirname, "node_modules");
const packsDir = path.join(__dirname, "packs");

// 遍歷目錄,查找所有的 package.json 文件
function findPackageJson(directory) {
  const results = [];
  const files = fs.readdirSync(directory);
  for (const file of files) {
    const filePath = path.join(directory, file);
    const stat = fs.statSync(filePath);
    if (stat.isDirectory()) {
      results.push(...findPackageJson(filePath));
    } else if (file === "package.json") {
      results.push(filePath);
    }
  }
  return results;
}

// 執(zhí)行 `npm pack` 命令,生成 `.tgz` 文件
function packModule(moduleDir) {
  return new Promise((resolve, reject) => {
    exec("npm pack", { cwd: moduleDir }, (err, stdout, stderr) => {
      if (err) {
        reject(err);
      } else {
        const tgzFile = path.join(moduleDir, `${stdout.trim()}`);
        resolve(tgzFile);
      }
    });
  });
}

// 移動 `.tgz` 文件到 `packs` 目錄
function moveTgzFile(tgzFile) {
  const fileName = path.basename(tgzFile);
  const destFile = path.join(packsDir, fileName);
  fs.renameSync(tgzFile, destFile);
  console.log(`Moved ${fileName} to ${destFile}`);
}

// 查找所有的 package.json 文件,執(zhí)行 `npm pack`,并移動生成的 `.tgz` 文件
findPackageJson(modulesDir).forEach((packageJsonFile) => {
  const moduleDir = path.dirname(packageJsonFile);
  packModule(moduleDir)
    .then(moveTgzFile)
    .catch((err) => console.error(`Error packing ${moduleDir}: ${err.message}`));
});

思考

當(dāng)node_modules里的模塊很多時,這個腳本的運行時間可能會很長(old cpu??),所以還有很多優(yōu)化空間,仔細(xì)觀察node_modules文件夾的目錄結(jié)構(gòu)會發(fā)現(xiàn)當(dāng)目錄名稱包含@符號時,這個目錄下可能存在多個依賴包 ,普通目錄一個依賴包。所以findPackageJson方法可以做如下優(yōu)化:文章來源地址http://www.zghlxwxcb.cn/news/detail-769319.html

// 遍歷目錄 當(dāng)目錄下存在 package.json 文件時 退出當(dāng)前循環(huán)
function findPackageJson(directory) {
  const results = [];
  const files = fs.readdirSync(directory);

  for (const file of files) {
    const filePath = path.join(directory, file);
    const stat = fs.statSync(filePath);

    if (stat.isDirectory()) {
      const packagePath = path.join(filePath, "package.json")
      if (fs.existsSync(packagePath)) {
        results.push(packagePath);
        continue;
      }
      results.push(...findPackageJson(filePath));
    }
  }
  return results;
}

到了這里,關(guān)于npm pack 命令生成離線npm模塊/npm依賴包的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 前端主流框架:項目運行命令 npm 詳解

    ????????作為一位資深前端開發(fā),我對npm(Node Package Manager)的使用有著深入的了解。npm是Node.js的包管理器,用于安裝、管理和刪除各種前端庫和工具?,F(xiàn)在,讓我們深入了解npm在Vue、React、Angular和Vue 3項目中的一些基本使用方法和配置。 npm提供了一系列命令,用于管理項

    2024年02月19日
    瀏覽(20)
  • npm常用命令 + 前端常用的包管理工具 以及 npm淘寶鏡像配置等

    npm常用命令 + 前端常用的包管理工具 以及 npm淘寶鏡像配置等

    下載地址 官網(wǎng): https://nodejs.org/en. 中文網(wǎng)站: https://nodejs.org/zh-cn. 安裝之后,使用 node -v 命令查看安裝的版本,如下: 關(guān)于windows上的安裝可以參考下面的文章: vue2入門——菜鳥級1篇. 前端常用的包管理工具有:npm、cnpm、yarn,更多請繼續(xù)…… 前端常用的包管理工具有:n

    2024年02月11日
    瀏覽(49)
  • 離線環(huán)境conda虛擬環(huán)境備份遷移--conda pack問題

    1.第一步:創(chuàng)建虛擬環(huán)境 conda create -n pyenv --clone base? 或者 conda create -n pyenv python==3.8.5 --offline 命令執(zhí)行結(jié)束,在路徑/xxxx/anaconda/envs 下看到pyenv 或者 conda info --envs 查看羅列虛擬環(huán)境 2.第二步:打包環(huán)境 conda pack -n pyenv -o /xxxxx/pyenv.tar.gz 報錯: Collecting packages... CondaPackError:? F

    2024年02月13日
    瀏覽(13)
  • maven install命令:將包安裝在本地倉庫,供本地的其它工程或者模塊依賴

    maven install命令:將包安裝在本地倉庫,供本地的其它工程或者模塊依賴

    有時候,自己本地的maven工程依賴于本地的其它工程,或者manven工程中的一個模塊依賴于另外的模塊,可以執(zhí)行maven的install命令,將被依賴的包安裝在maven本地倉庫。 maven的install插件的介紹可以參考:https://maven.apache.org/plugins/maven-install-plugin/ maven的install插件有三個goals: ins

    2024年02月14日
    瀏覽(20)
  • 前端命令npm 、 cnpm、 pnpm、yarn 、 npx、nvm的區(qū)別

    大名鼎鼎的 npm (Node Package Manager)是隨同NodeJS一起安裝的包管理工具,NPM本身也是Node.js的一個模塊。 npm的含義有兩層: npm服務(wù)器,npm服務(wù)器網(wǎng)址為https://www.npmjs.org,npm是 Node 包的標(biāo)準(zhǔn)發(fā)布平臺,用于 Node 包的發(fā)布、傳播; npm包管理器,指在命令行窗口或終端使用npm命令來管理

    2024年02月11日
    瀏覽(57)
  • 前端構(gòu)建工具 代碼優(yōu)化壓縮 模塊管理 依賴管理 資源處理轉(zhuǎn)換 自動化任務(wù) 流程優(yōu)化 高級特性 Webpack Parcel Rollup Gulp 靜態(tài)資源

    前端構(gòu)建在前端開發(fā)中具有重要的意義,主要有以下幾個方面: 代碼優(yōu)化和壓縮:前端構(gòu)建工具可以對前端代碼進(jìn)行優(yōu)化和壓縮,例如去除注釋、空格,合并和縮小文件大小等。這可以減少文件的加載時間和傳輸大小,提高網(wǎng)頁加載速度,優(yōu)化用戶體驗 模塊管理和依賴管理

    2024年02月09日
    瀏覽(21)
  • 解決報錯:Not implemented: HTMLCanvasElement.prototype.getContext (xxx installing the canvas npm pack

    解決報錯:Not implemented: HTMLCanvasElement.prototype.getContext (xxx installing the canvas npm pack

    這個是在js逆向中使用jsdom模擬瀏覽器環(huán)境,結(jié)果還是報錯了:? 網(wǎng)上很多說法是安裝canvas: npm install canvas,其實并不正確? 解決辦法:加入以下代碼: window.HTMLCanvasElement.prototype.getContext = () = { ? // return whatever getContext has to return }; 問題解決: ?

    2024年02月20日
    瀏覽(22)
  • RuoYi-Vue-generator 代碼生成模塊 動態(tài) 多數(shù)據(jù)源切換 前端+后臺

    RuoYi-Vue-generator 代碼生成模塊 動態(tài) 多數(shù)據(jù)源切換 前端+后臺

    需求場景: 若依框架的30張數(shù)據(jù)表 和 業(yè)務(wù)使用的數(shù)據(jù)表,同數(shù)據(jù)源,但分開的兩個庫,原生若依只支持主庫的代碼生成,故自己修改添加代碼來實現(xiàn) 若依多數(shù)據(jù)源的使用 修改頁面ruoyi-uisrcviewstoolgenimportTable.vue el-form 中新增 el-form-item 添加 data 添加方法 ruoyi-uisrcapitool

    2024年02月04日
    瀏覽(26)
  • npm安裝指定版本包,npm按版本安裝;npm刪除依賴,卸載依賴

    例如安裝element-ui的2.15.8版本 在package.json中可以看到: 注:已有版本的情況下需要先刪除依賴,不能直接在package.json中改版本號,因為package-lock.json中仍然是修改前的版本號。 1、全局安裝 2、本地安裝 3、信息寫入

    2024年02月12日
    瀏覽(68)
  • 前端js,uniapp使用printease連接打印機(jī)打印,打印命令生成

    接下來我們將使用printease實現(xiàn)前端js,uniapp打印。 此外,連接打印機(jī)的方式有很多種,這里并不會涉及到,該庫只是提供了一種打印機(jī)指令的生成方式,你可以將生成的指令發(fā)送到打印機(jī),打印機(jī)會執(zhí)行一次印刷過程。 這個教程是關(guān)于tspl指令的,如果你使用的其他指令,可

    2024年02月13日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包