Joh*_*one 18 javascript assets npm reactjs webpack
我一直在敲打这个问题一段时间,我想知道是否有可能开始.感谢您的帮助!
我有一个npm包,它基本上是一个React组件库.该库具有嵌入式样式表,它引用CSS中的字体和图像等资源.然后使用webpack捆绑这些my-package.js.
这个配置看起来像:
var path = require('path');
module.exports = {
module: {
loaders: [
{
test: /\.js$/,
loaders: ['babel-loader'],
exclude: /node_modules/
},
{
test: /\.css$/,
loader: "style-loader!css-loader"
},
{
test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/,
loader: 'file-loader'
},
{
test: /\.styl$/,
loader: 'style-loader!css-loader!stylus-loader'
}
]
},
entry: [
'./lib/components/index.js',
'./lib/index.styl'
],
output: {
path: path.join(__dirname, 'build/'),
filename: 'my-package.js'
}
}
Run Code Online (Sandbox Code Playgroud)
随着./lib/components/index.js看起来像:
import '../index.styl';
import MyComponent from './my-component.js';
export {
MyComponent
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
现在在另一个代码库中,我有了主应用程序,它安装了这个npm包.
我的应用程序root需要这个包...
import MyPackage from 'my-package';
Run Code Online (Sandbox Code Playgroud)
然后将自己的webpack捆绑并加载到浏览器上.所有脚本和样式块都是正确捆绑的,但引用资产的样式使用的是npm包本身的相对url,因此从应用程序中提供404.
有没有办法告诉webpack解决这些图像node_modules/my-package/build/[webpack-generated-name].jpg?
我的应用程序的webpack配置如下所示:
var path = require('path'),
webpack = require('webpack');
module.exports = {
devtool: '#eval-source-map',
entry: [
'my-package',
'webpack/hot/only-dev-server',
'./app/index.js',
],
output: {
path: path.join(__dirname, 'build/static'),
filename: 'bundled.js',
publicPath: '/',
},
plugins: [
new webpack.HotModuleReplacementPlugin()
],
resolve: {
extensions: ['', '.js']
},
resolveLoader: {
'fallback': path.join(__dirname, 'node_modules')
},
module: {
loaders: [
{
test: /\.js$/,
loaders: ['react-hot', 'babel'],
exclude: /node_modules/,
include: __dirname
},
{
test: /\.css?$/,
loader: "style-loader!css-loader",
include: __dirname
},
{
test: /\.(jpg|jpeg|ttf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
loader: 'file-loader'
},
{
test: /\.styl$/,
loader: 'style-loader!css-loader!stylus-loader'
}
]
}
};
Run Code Online (Sandbox Code Playgroud)
找到了解决这个问题的方法.
在我的应用程序的webpack配置中,我添加了一个插件(由@Interrobang推荐),它将静态资产从node_module/my-package应用服务器的公共路径复制到:
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)
然后可以通过调用资产名称来访问它们:localhost:XXXX/my-image.jpg.这里的服务器基本上是在看/my/public/my-image.jpg你是否正确设置了它.
我正在使用Express,所以我只需要app.use(express.static('my/public'))在我的app服务器中定义.
| 归档时间: |
|
| 查看次数: |
5293 次 |
| 最近记录: |