我有一个Angular应用程序,它使用webpack作为模块捆绑器.此应用程序还使用一些其他项目的资产(图像,字体,样式),这些项目作为node_modules导入.
我的应用程序的结构是这样的
src/
app/
...
stylesheets/
application.scss
Run Code Online (Sandbox Code Playgroud)
现在,在我的scss中,我有一些对图像的引用src="/images/...",这些图像位于node_modules/my_assets/images中,所以我使用了copy-webpack-plugin将图像包含在捆绑时间中
new CopyWebpackPlugin([
{ from: 'node_modules/my-assets/images', to: 'images' },
{ from: 'node_modules/my-assets/favicons', to: 'favicons' },
Run Code Online (Sandbox Code Playgroud)
这工作正常.
问题现在是字体.我有相同的结构,但当样式表引用时,字体现在具有相对URL./fonts/Open-Sans-300/Open-Sans-300.eot
所以我试着和以前一样
new CopyWebpackPlugin([
{ from: 'node_modules/my-assets/images', to: 'images' },
{ from: 'node_modules/my-assets/favicons', to: 'favicons' },
{ from: 'node_modules/my-assets/fonts', to: 'fonts' }
])
Run Code Online (Sandbox Code Playgroud)
这不起作用.如果我直接在/ src/stylesheets文件夹中手动复制/ fonts文件夹,它可以正常工作.我猜这是因为它是相对的我没有复制我必须的文件夹,所以我尝试了很多变化:
{ from: 'node_modules/my-assets/fonts', to: '/fonts' },
{ from: 'node_modules/my-assets/fonts', to: './fonts' },
{ from: 'node_modules/my-assets/fonts', to: 'src/stylesheets/fonts' },
{ from: 'node_modules/my-assets/fonts', to: '/src/stylesheets/fonts' }
Run Code Online (Sandbox Code Playgroud)
这些都不起作用.知道为什么不呢?我该怎么写呢?
我还要提一下,我有一个字体加载器
{
test: /\.(png|woff|woff2|eot|ttf|svg)$/,
loader: 'url-loader?limit=100000'
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.
编辑:我还必须说这个问题发生在使用webpack-dev-server时,所以我真的不知道webpack在做这样的事情时在哪里复制文件 { from: 'node_modules/my-assets/images', to: 'images' }
谢谢
如果您只是希望 SASS 文件能够解析图像或字体等静态资源的路径,CopyWebpackPlugin那么这个工具不适合您。
给定你的字体和 SCSS 加载器,Webpack 应该能够自行构建依赖关系树。
\n从 Webpack 配置中删除CopyWebpackPlugin设置并确保显式设置output.publicPath设置。
output: {\n publicPath: \'/\',\n /* follows your output config */\n},\nRun Code Online (Sandbox Code Playgroud)\n由于Webpacksass-loader不提供 url 重写,因此您必须告诉 webpack 将它们相应地重写到构建后资源移动的位置。
Webpackresolve-url-loader 插件正是这样做的。将其直接放在 CSS 加载器链中的 sass-loader 之后,您就可以开始了。
{\n test : /\\.scss$/,\n loaders: [\'style-loader\', \'css-loader\', \'resolve-url-loader\', \'sass-loader?sourceMap\']\n}\nRun Code Online (Sandbox Code Playgroud)\ncopy-webpack-plugin 文档,清楚地解释了为什么该插件不使用 webpack-dev-server 复制文件:
\n\n\n从 3.0.0 版本开始,我们停止使用 fs 将文件复制到文件系统,并开始依赖于 webpack 的内存文件系统:
\n\n\n... webpack-dev-server 将提供构建文件夹中的静态文件。它\xe2\x80\x99将监视您的源文件是否有更改,并且当发生更改时,捆绑包将被重新编译。此修改后的包是从内存中 publicPath 中指定的相对路径提供的(请参阅 API)。它不会写入您配置的输出目录。
\n如果必须让 webpack-dev-server 写入输出目录,可以使用write-file-webpack-plugin强制执行强制执行。
\n
| 归档时间: |
|
| 查看次数: |
3786 次 |
| 最近记录: |