【发布时间】:2023-03-05 11:10:01
【问题描述】:
我们如何在 npm 包中引用本地文件?由于 npm 包是由另一个消费者安装的,这些引用相对于消费者的根文件夹是否会过时?
例如,我为 Angular 创建了一个 npm 包。该软件包还从第三方重新发送了少量 html 和 css 文件(它们没有 angular 软件包)。我确保在发布包期间将文件复制到...dist\thirdparty。我想使用相对路径或其他机制在我的 npm 包中引用其中一些文件。
例如
@Component({
selector: 'ng2-my-library',
template: '<div></div>'
})
export class MyLibraryComponent {
.....
var newWindowUrl = "./thirdparty/some.html"; **// Need to relatively locate some.html here**
window.open(newWindowUrl);
.....
}
在我将my-package 安装到示例角度应用程序后,上面的代码导致"localhost:3000/thirdparty/some.html",这是不准确的。
我该怎么做?
安装我的包后,消费者会有这个结构consumerApp
node_modules(Folder)
ng2-my-library(Folder)
ng2-pdfjs-viewer.umd.js // This is where I need to access some.html
thirdparty(Folder)
some.html
我也考虑过指导包的消费者做这样的事情,但是这个指令非常依赖于其他构建工具来复制或重定向到 html,这不是我想要的。
var TransferWebpackPlugin = require('transfer-webpack-plugin');
...
plugins: [
new TransferWebpackPlugin([
{ from: 'node_modules/my-package/assets', to: path.join(__dirname, 'my/public') }
])
]
我也尝试过使用这个包。显然它没有为我提供正确的 html 结果。 https://www.npmjs.com/package/static-reference
【问题讨论】:
-
您在寻找什么预期行为?
-
正如我所说,简单地说,在创作 Angular 库时,在“库内”引用静态 html 的最佳机制是什么。当消费者安装该库时,静态 html 将安装在 ./node_modules/thirdparty/some.html 下。
-
组件需要知道它的根路径,如果组件是由2个不同的模块在2个不同的路径上挂载的,那么它将如何工作?您可以直接使用
window.location.href,但我怀疑这会有所帮助。 -
你能显示你安装在
node_modules中的包文件结构吗?我对这些第三方的东西在哪里安装以及你的东西在哪里安装有点困惑 -
您可以尝试在您的网络服务器中公开公开
thirdparty文件夹并在您的组件中像window.open('/thirdparty/some.html')一样引用它?
标签: angular typescript npm