引用 npm 包中的本地文件

int*_*t-i 5 npm typescript angular

我们如何在 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);
.....
}
Run Code Online (Sandbox Code Playgroud)

在我安装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') }
           ])
         ] 
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用这个包。显然它没有为我提供正确的 html 结果。 https://www.npmjs.com/package/static-reference

4nd*_*t3s 1

__dirname而是使用.来获取保存文件的本地目录。将代码更改为:

var newWindowUrl = __dirname + "/thirdparty/some.html";
window.open(newWindowUrl);
Run Code Online (Sandbox Code Playgroud)

有关 __dirname 的更多信息请参见此处

不要忘记在项目中包含节点类型:

npm install --save-dev @types/node
Run Code Online (Sandbox Code Playgroud)