当前位置: 首页 > 面试题库 >

包含来自webpack捆绑的npm软件包的资产

祁霖
2023-03-14
问题内容

我已经为此花了好一会儿,想知道是否有可能从头开始。感谢您对此的任何帮助!

npm包

我有一个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'
  }
}

随着./lib/components/index.js看起来像:

import '../index.styl';
import MyComponent from './my-component.js';

export {
  MyComponent
}

到目前为止,一切都很好。

应用程序

现在,在另一个代码库中,我有了主应用程序,该应用程序安装了该npm软件包。

我的应用程序根目录需要此软件包…

import MyPackage from 'my-package';

然后将其本身打包成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'
      }
    ]
  }
};

问题答案:

找出解决此问题的方法。

在应用程序的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') }
  ])
]
...

然后,通过调用资产名称即可访问这些名称localhost:XXXX/my-image.jpg。基本上,这里的服务器正在查看/my/public/my- image.jpg是否已正确设置。

我正在使用Express,因此只需要app.use(express.static('my/public'))在我的应用服务器中进行定义。



 类似资料:
  • 我正在尝试建立一个混合AngularJS Angular应用程序,它使用Webpack作为模块加载程序,Karma Jasmine作为测试框架。为了运行测试,我正在使用;但是,webpack创建的包从未加载到浏览器中,因此测试从未执行(duh!)。我试过很多方法来检查是否正常,但我在其他网站上都没有发现这个问题。 所以,一点调试信息。首先,我的文件: 运行Karma时,webpack执行成功(pr

  • 问题内容: 我对mvc4捆绑器有一个奇怪的问题,不包括扩展名为.min.js的文件 在我的BundleConfig类中,我声明 我认为 当它渲染时,它只会渲染 如果我将jquery.tmpl.min.js重命名为jquery.tmpl.js(并相应地更新捆绑软件中的路径),则两个脚本均正确呈现。 是否有一些配置设置导致其忽略“ .min.js”文件? 问题答案: 我最初发布的解决方案是有问题的(很

  • 问题内容: 我在android上的自定义视图上写。它使用了一些png,作为项目中drawable- folder(我现在将其放在所有drawable文件夹中,只是为了确保)的资源提供。 不幸的是,当我启动该应用程序时,我被强制关闭,日志最后说的是:(十六进制数字是我打算加载的第一个图标)。 现在让我们感到奇怪的是:eclipse adt插件的图形布局编辑器在将显示图标加载到其设计视图中没有任何问题

  • 我有一个使用react开发的网站,它只有一个页面,但产品包大小是1.11MIB。我正在使用firestore、firebase storage、material UI、react redux,该应用程序运行良好,除了捆绑包大小外,一切正常。 我的网页包配置文件 我不知道我在这里错过了什么来减小节点模块的大小。如果我们有任何其他选择,以减少捆绑大小,请给我一个建议。

  • 我正在使用和作为模块绑定器编写一个web应用程序。到目前为止,我的代码非常轻,整个文件夹的大小是25kb。 然而,我的是从创建的,其大小为2.2MB。在使用标志运行优化后,它将捆绑包减少到700kb,这仍然非常大。 我已经查看了文件,它的大小是130kb。 有没有可能webpack产生了这么大的文件,或者我做错了什么? webpack.config.js 编辑 package.json:

  • 我是OSGi的新手。我正在使用Apache Felix。我已经构建了一个捆绑包,并且具有依赖性。当我尝试使用启动它会给我这个错误。 org . OSGi . framework . bundle exception:无法解析lk . ucsc . research . belly runner[20](R 20.0):缺失需求[lk . ucsc . research . belly runner