我正在尝试将我的应用程序与 webpack 4 捆绑在一起,它是一个基于 Polymer 的应用程序,在 bower 和 HTML 文件中有依赖项
这是我的 webpack 配置:
'use strict';
const webpack = require('webpack');
/* global __dirname module require */
/* eslint comma-dangle: ["error", "never"] */
const path = require('path');
module.exports = {
entry: './my-entry.html',
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, './dist'),
publicPath: 'dist/'
},
resolve: {
modules: ['bower_components', 'node_modules'],
descriptionFiles: ['package.json', 'bower.json']
},
devtool: 'inline-source-map',
module: {
rules: [
{
test: /\.html$/,
use: [
{ loader: 'babel-loader' },
{ loader: 'polymer-webpack-loader' }
]
},
{
test: /\.js$/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['env']
}
}
]
}
]
}
};
当我运行 webpack 时,出现以下错误:
ERROR in ./my-page.html
Module not found: Error: Can't resolve '../util-custom-types/imports/currency.html' in 'C:\Workspaces\my-project'
resolve '../one-package/imports/currency.html' in 'C:\Workspaces\my-project'
using description file: C:\Workspaces\my-project\package.json (relative path: .)
此导入../util-custom-types/imports/currency.html
位于内部bower_components/util-custom-types/imports/currency.html
,当我在polymer serve
没有捆绑的情况下运行时,它可以工作。
看起来 webpack 里面缺少了一些东西
resolve: {
modules: ['bower_components', 'node_modules'],
因为它不会在这些文件夹中查找文件。
这是失败的进口之一
<link rel="import" href="../util-custom-types/imports/currency.html">
我在互联网上尝试了一些插件,但由于 webpack 4 很新,很多插件都无法正常工作。
我知道如果我使用指向bower_components
文件夹的导入链接,像这样,<link rel="import" href=".bower_components/util-custom-types/imports/currency.html">
它会起作用,但这不是一个有效的解决方案,因为某些组件也有相同的导入方式,我无法修改它。
所以,总而言之,我想使用 html 导入,指向 bower_components 文件夹,如下所示:
<link rel="import" href="../util-custom-types/imports/currency.html">
到位于的文件
./bower_components/util-custom-types/imports/currency.html
在 webpack 4 中,没有引用 bower_components 目录。
有没有人做到这一点?
编辑:
我创建了一个示例 github 项目,其中只有一个从聚合物 init 创建的组件和一个 webpack 配置。
https://github.com/vlaraort/demo_polymer_webpack
重要的是成为一个组件,而不是一个应用程序,因为 polymer 的 html 导入并不指向 bower 组件,而在应用程序中,polymer 的 html 导入指向 bower_components。
零件:
<link rel="import" href="../polymer/polymer-element.html">
应用:
<link rel="import" href="../bower_components/polymer/polymer-element.html">
安装,npm i & bower i
运行工作的聚合物服务npm run polymer:dev
运行不工作的 webpack 服务npm run webpack:dev
正如您在 中看到的那样webpack:dev
,聚合物元素导入正试图从http://localhost:8080/polymer/polymer-element.html
而不是获取http://localhost:8080/bower_components/polymer/polymer-element.html
,因此失败了。
因此,问题的目的是了解聚合物服务对进口有什么魔力,因为它解决了这个链接
<link rel="import" href="../polymer/polymer-element.html">
进入 bower_components,以及如何在 webpack 中重现该行为。
谢谢!