Rumah  >  Artikel  >  hujung hadapan web  >  Perbincangan ringkas tentang cara menggunakan nod untuk meningkatkan kecekapan kerja

Perbincangan ringkas tentang cara menggunakan nod untuk meningkatkan kecekapan kerja

青灯夜游
青灯夜游ke hadapan
2021-11-10 09:55:461495semak imbas

Artikel ini akan menunjukkan kepada anda cara menggunakan nod di tempat kerja dan cara menggunakannya untuk meningkatkan kecekapan kerja saya harap ia akan membantu anda!

Perbincangan ringkas tentang cara menggunakan nod untuk meningkatkan kecekapan kerja

Anda perlu bergantung pada fail luaran dalam projek kerja Fail ini diselenggara oleh pasukan lain dan dibina menggunakan jenkins Produk binaan ditolak ke [Amazon S3](. aws.amazon .com/pm/serv-s3/…), kami perlu memuat turun fail secara manual daripada S3 dan kemudian menyalinnya ke projek. Keseluruhan proses boleh diautomasikan.

Selain itu, kami menghadapi masalah yang serius: laluan produk binaan yang kami perlukan dalam S3 adalah serupa dengan 'a/b//c/', dan tambahan / sebenarnya adalah laluan bernama '/' folder, folder ini biasanya boleh dikenali menggunakan Pelayar S3 Windows Di bawah Mac, ia mungkin kerana '/' dianggap sebagai pemisah fail, jadi beberapa alat GUI tidak dapat mengenali direktori secara normal, jadi pembangun Mac masih perlu Menggunakan Windows. untuk memuat turun produk dalam mesin maya adalah proses yang sangat membazir dan tidak bermakna. [Pembelajaran yang disyorkan: "tutorial nodejs"]

Memandangkan Amazon menyediakan akses API, saya terfikir untuk melaksanakan skrip untuk menyelesaikan kerja memuat turun kemas kini.

Proses pengisihan

Skrip yang tidak digunakan:

Perbincangan ringkas tentang cara menggunakan nod untuk meningkatkan kecekapan kerja

Skrip terpakai:

jenkins → Nama produk → Laksanakan skrip

Ini boleh dilakukan secara langsung, menghapuskan proses manual, dan masalah pepijat '/' tidak akan berlaku.

Pembangunan

Sambung ke AWS

Di sini kami menggunakan aws-sdk yang disediakan oleh Amazon, menggunakan klien S3 dan memasukkan accessKeyId dan secretAccessKey untuk menyambung:

import S3 from "aws-sdk/clients/s3";
const s3 = new S3({ credentials: { accessKeyId, secretAccessKey } });

Muat turun fail

aws-sdk menyediakan antara muka untuk menambah, memadam, mengubah suai dan menyemak baldi dan fail Di sini kita boleh mendapatkan nama fail produk yang dibina oleh Jenkins terlebih dahulu muat turun fail mengikut nama fail dan lokasi:

const rs = s3
  .getObject({ Bucket: "your bucket name", Key: "file dir + path" })
  .createReadStream();

Bucket ialah lokasi Baldi di mana fail disimpan Kunci ialah maklumat laluan fail dalam S3 nama dan nama fail.

Di sini kita boleh mendapatkan ReadStream, dan kemudian gunakan node.js untuk menulis terus ke setempat:

const ws = fs.createWriteStream(path.join(__dirname, outputfilename));
rs.pipe(ws);

Nyahzip

Gunakan alat node-tar untuk nyahzip dan pasang terus Itu sahaja:

npm install tar

extract alias x, kene terus guna tar.x dah cukup, tak perlu simpan fail .tar asal:

- const ws = fs.createWriteStream(path.join(__dirname, outputfilename));
- rs.pipe(ws);
+ rs.pipe(tar.x({ C: path.join(__dirname, outputfilename) }));

Operasi paip di sini akan mengembalikan objek aliran, dan kita boleh mendengar kaedah penamat untuk mengendalikan proses seterusnya:

const s = rs.pipe(tar.x({ C: path.join(__dirname, outputfilename) }));
s.on('finish', () => {
	// do something ...
})

Direktori Ratakan

Fail asal mempunyai subfolder, kita perlu mengalihkannya ke lapisan paling luar, jadi kita perlu melakukan operasi folder rata.

Di sini kami menggunakan API berkaitan fs untuk membaca API fs dibahagikan kepada dua jenis: segerak dan tak segerak Nama fungsi API segerak berakhir dengan Penyegerakan Fungsi tak segerak secara lalai kepada ralat panggil balik disediakan di bawah API tak segerak gaya Promise, anda boleh menggunakannya mengikut keperluan.

Memandangkan direktori kami hanya mempunyai satu tahap, kami hanya melakukan satu tahap meratakan Jika terdapat berbilang peringkat, kami boleh menggunakan rekursi:

async function flatten(dir) {
  const fileAndDirs = await fsp.readdir(dir);
  const dirs = fileAndDirs.filter((i) =>
    fs.lstatSync(path.join(dir, i)).isDirectory()
  );
  for (const innerDir of dirs) {
    const innerFile = await fsp.readdir(path.join(dir, innerDir));
    await Promise.all([
      innerFile
        .filter((item) => fs.lstatSync(path.join(dir, innerDir, item)).isFile())
        .map((item) =>
          fsp.rename(path.join(dir, innerDir, item), path.join(dir, item))
        ),
    ]);
    remove(path.join(dir, innerDir));
  }
}

Salin ke lokasi sasaran

Kemudian salin ke direktori projek kami Untuk menyalin, anda hanya perlu memanggil copyFile API Untuk fail yang tidak diperlukan, gunakan ungkapan biasa untuk mengkonfigurasi kecualikan senarai hitam:

async function copy(from, to) {
  const files = await fsp.readdir(from);
  await Promise.all(
    files
      .filter((item) => !exclude.test(item))
      .map((item) => fsp.copyFile(path.join(from, item), path.join(to, item)))
  );
}

Fail konfigurasi

.

dalam Penggunaan sebenar, fail konfigurasi harus diasingkan daripada kod AccessKeyId dan secretAccessKey di sini harus dikonfigurasikan oleh setiap pengguna, jadi ia diletakkan dalam fail konfigurasi yang berasingan, dan kandungan konfigurasi yang berkaitan dibaca dalam program utama :

// config.js
module.exports = {
  s3: {
    accessKeyId: 'accessKeyId',
    secretAccessKey: 'secretAccessKey',
  }
};
// main.js
if (!fs.existsSync('config.js')) {
  console.error('please create a config file');
  return;
}
const config = require(path.resolve(__dirname, 'config.js'));

Melalui parameter

Nama fail untuk setiap muat turun perlu dihantar semasa membuat panggilan dalam fail di sini ia dihantar terus sebagai parameter.

Anda boleh membacanya melalui process.argv dalam node.js ialah tatasusunan Elemen pertama tatasusunan ini ialah laluan pemasangan nod Elemen ketiga bermula dengan parameter tersuai, jadi ia perlu bermula dari process.argv[2]. Jika anda mempunyai keperluan parameter baris perintah yang kompleks, anda boleh menggunakan pustaka penghuraian parameter baris perintah seperti commander Memandangkan contoh ini hanya memerlukan satu parameter, anda boleh membacanya terus di sini:

const filename = process.argv[2];
if (!filename) {
	console.error('please run script with params');
	return;
}

至此,一个可用的命令行工具就完成了。

总结

node.js 可以开发后端,但是 node.js 意义最大的地方绝不是使用 JS 开发后端。对前端开发者而言,node.js 真正的价值在于它是一个非常实用的工具,前端工具 Webpack、rollup、dev-server 等都是 node 创造的价值,由于 NPM 丰富的生态,使用 node 可以快速完成脚本的开发,处理开发中遇到的一些工具链与效率的问题很有效,在工作中遇到问题时可以考虑尝试。

更多编程相关知识,请访问:编程入门!!

Atas ialah kandungan terperinci Perbincangan ringkas tentang cara menggunakan nod untuk meningkatkan kecekapan kerja. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam