1.使用的ncc进行打包node.js 文件
2.使用的命令如下:
npm i -g @vercel/ncc
ncc build input.js -m -o dist 只需要输入这俩行命令就可以打包完成。
npx ncc build index.js -m -o ./dist 服务器指令
-m #混淆、压缩代码
-o #指定输出目录
打包完毕之后会在当前工程目录中,创建一个dist文件夹,存放打包后的文件index.js
还可以这样打包
// 全局安装pkg
npm install -g pkg
// 进入你的项目目录
cd project
// 执行打包exe文件,其中start.js就是你的入口文件
pkg -t win start.js
// 如果你需要支持win/linux/mac多个平台的话,就执行这一句
pkg start.js
ncc build 入口文件 -o ./dist -o代表打包的文件夹 ./dist输出的目录为dist
niginx部署在本地的服务器上需要把路径一定放对 否则会出现各种问题。以及代理的端口一定配置好。在重新启动前niginx一定要求任务管理器把之前的强制关掉,否则会启动多个niginx服务。
如果niginx不把之前关掉,会产生一下缓冲,当你访问的时候还是之前的niginx并没有显示的是最新的niginx服务。然后一旦出现问题先找niginx服务中的日志信息。每次关掉niginx的时候一定需要吧日志清除一下。否则排查错误无法排查。

自己手写一个打包node项目的脚本已测试:
import cmd from "shelljs";
import fs from "fs";
import path from "path";
getState(path.resolve());
/**
* 获取当前路径下的文件
*/
async function getState(paths) {
let data = await fs.readdirSync(paths);
for (let pop of data) {
if (pop == "build.js") {
continue;
}
if (pop == "video") {
continue;
}
if (pop == "dist") {
continue;
}
if (pop == ".history") {
continue;
}
if (pop == "node_modules") {
continue;
}
if (pop.split(".")[1] == "js") {
await runcmd(path.join(paths, `/${pop}`), paths + "/dist");
await fs.renameSync(paths + "/dist/index.js", paths + "/dist/" + pop);
continue;
}
if (pop.split(".")[1] == "json") {
let ReadStream = fs.createReadStream(path.join(paths, pop));
let writeStrem = fs.createWriteStream(path.join(paths, "./dist/" + pop));
ReadStream.pipe(writeStrem);
continue;
}
console.log(paths + "/" + pop);
createsraferFilder(paths + '/' + pop, pop)
}
/**
* readFileSync 读取文件
*/
let json = await fs.readFileSync(path.join(path.resolve(), "./package.json"));
let packages = JSON.parse(json.toString());
delete packages["type"];
await fs.writeFileSync(
path.join(path.resolve(), "./dist/package.json"),
JSON.stringify(packages)
);
try {
let dirs = await fs.statSync((path.resolve(), "./dist/video"));
} catch (e) {
await fs.mkdirSync((path.resolve(), "./dist/video"));
}
}
/**
* 执行cmd
*/
function runcmd(path, dir) {
console.log(`ncc build ${path} -m -o ${dir} `)
return nodeCmd(`ncc build ${path} -m -o ${dir} `);
}
/**
* 执行cmd
*/
function nodeCmd(str) {
return new Promise((req, res) => {
cmd.exec(str, function (code, stdout, stderr) {
if (code === 0) {
req();
}
});
});
}
/**
* 创建文件夹
*/
async function createsraferFilder(paths, props) {
let dir = await fs.statSync(paths);
if (dir.isDirectory()) {
try {
let dirs = await fs.statSync(path.join(paths, "../dist/" + props));
} catch (e) {
await fs.mkdirSync(path.join(paths, "../dist/" + props));
}
let data = await fs.readdirSync(paths);
for (let pop of data) {
if (pop.split(".")[1] == "js") {
console.log(
path.join(paths, `/${pop}`),
path.join(paths, `../dist/${props}/`)
);
await runcmd(
path.join(paths, `/${pop}`),
path.join(paths, `../dist/${props}/`)
);
await fs.renameSync(
path.join(paths, `../dist/${props}/index.js`),
path.join(paths, "../dist/" + props + "/" + pop)
);
}
if (pop.split(".")[1] == "json") {
let ReadStream = fs.createReadStream(path.join(paths, "/" + pop));
let writeStrem = fs.createWriteStream(
path.join(paths, "../dist/" + props + "/" + pop)
);
ReadStream.pipe(writeStrem);
}
}
}
}
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8080;
server_name localhost;
charset utf-8;
location / {
root E:/bgwl/nginx/nginx-1.22.1/nginx-1.22.1/dist/;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://ip:xxx/;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://192.168.1.11:9800/;
}
location /zfMapRoad/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://192.168.1.11:9800/;
}
location /view/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://192.168.1.11:9800/view/;
}
location /recorder/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://192.168.1.11:9800/recorder/;
}
}
server {
listen 9003;
server_name localhost;
charset utf-8;
location /cesiumlab {
alias E:/bgwl/nginx/nginx-1.22.1/nginx-1.22.1/nantong-tms/nantong-tms/;
index tilemapresource.xml;
}
}
}
本文介绍了如何使用ncc工具将Node.js项目打包成单个文件,并详细讲述了Nginx在本地服务器的部署步骤,包括路径配置、端口设置、服务重启以及日志排查等关键环节,强调了正确管理和关闭Nginx服务以避免出现缓冲问题的重要性。
2655

被折叠的 条评论
为什么被折叠?



