在项目中使用自己发布的包时遇到的一些问题记录

一、前言

有时在项目中(尤其是内网)会使用自己开发的sdk或者是使用一些自己修改过源码的包,对于这些包的引入很多时候是直接放在public文件夹下即可,但是某些情况下很不方便,比如three.js,在使用examples下的文件常常会用到后处理,各种loader等,但是他们的源码都是import * as THREE from 'three'或者 import {Mesh} from 'three',这种形式,如果放在public下,那么就需要将每个导入都修改为相对路径,引入的少,引入的多就比较麻烦了,基于此背景,本文记录相关的一些经验。

二、引入本地包

2.1 基本引入方式

c++ 复制代码
npm install 待安装包的相对路径

这种方式可以引入,但是存在一个问题,那就是如three.js下的postProcessing文件夹在修改源码后不会自动更新,需要重新安装three,但是在内网环境下很容易出问题,不知什么原因,安装一次要很久,还很容易出错。不推荐!

2.2 优雅的引入方式

我的文件夹结构如下:

2.2.1 先初始化一个包

shell 复制代码
cd node_local_modules/EarthThree
shell 复制代码
npm init

此时会生成package.json,我的结果如下:

json 复制代码
{
  "name": "three",
  "version": "1.0.0",
  "main": "EarthThree.es6.js",
  "directories": {
    "example": "examples"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "description": ""
}

2.2.2 主目录配置

回主目录下修改package.json,增加workspaces配置

json 复制代码
{
  "devDependencies": {
    "vite": "^6.0.3"
  },
  "workspaces": [
    "node_local_modules/*"
  ]
}

2.2.2.3 安装three

shell 复制代码
npm install three

此时node_modules中生成了three文件夹并链接到node_local_modules

2.2.2.4 代码中使用

未报错,没有任何问题!

三、 文件夹拷贝后导致的问题

在进行文件夹拷贝后,执行项目会报错,找不到three

3.1 解决方式一

node_modules压缩后拷贝到新的文件夹再解压,解决问题,原理不明,一次次血泪实践换来的解决方案。

3.2 重新建立链接

认真排查后发现,报错时node_modulesthree文件夹是空的

原来是链接断了,解决方式是建立新链接

启动无报错!

四、总结

使用推荐的方案有一个很大的好处就是修改了earthThree文件夹下的文件,增加,替换,修改代码都能立马识别,不需要什么npm update three之类的更新的操作,但是基本引入方式每次都要执行,还总是出错!

相关推荐
IT枫斗者26 分钟前
IntelliJ IDEA 2025.3史诗级更新:统一发行版+Spring Boot 4支持,这更新太香了!
java·开发语言·前端·javascript·spring boot·后端·intellij-idea
N***p36533 分钟前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
享誉霸王2 小时前
15、告别混乱!Vue3复杂项目的规范搭建与基础库封装实战
前端·javascript·vue.js·前端框架·json·firefox·html5
a1117762 小时前
飞机躲避炸弹 网页游戏
前端·开源·html·threejs
夏乌_Wx2 小时前
mybash:简易 Shell 实现的设计思路与核心模块解析
linux·服务器·前端
滕青山3 小时前
URL编码/解码 核心JS实现
前端·javascript·vue.js
菜鸟小芯4 小时前
【GLM-5 陪练式前端新手入门】第五篇:响应式适配 —— 让个人主页 “见机行事”
前端·人工智能
无名之逆5 小时前
你可能不需要WebSocket-服务器发送事件的简单力量
java·开发语言·前端·后端·计算机·rust·编程
加农炮手Jinx5 小时前
Flutter for OpenHarmony:web_socket_channel 全平台 WebSocket 通信标准库,从原理到鸿蒙实战(3000字深度解析)
android·前端·网络·websocket·flutter·华为·harmonyos
王码码20355 小时前
Flutter for OpenHarmony:web_socket 纯 Dart 标准 WebSocket 客户端(跨平台兼容性之王) 深度解析与鸿蒙
android·前端·websocket·网络协议·flutter·华为·harmonyos