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
__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)