Jim*_*mmy 5 javascript webpack
我已经在我的反应应用程序的资产文件夹中放置了一个 csv 文件,但是,该文件没有被提取并通过 webpack 添加到我的 dist 构建中(图像仍然作为资产添加到构建中,但 csv 文件不是) . 你可以在下面看到我的 webpack 构建。那么如何通过 webpack 将一个 csv 文件添加到我的 dist 构建中(目标是让我的应用程序的用户能够下载这个文件)?谢谢!
webpack.dev.js
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
const config = merge(common, {
mode: 'development',
devtool: 'inline-source-map',
devServer: {
contentBase: './dist',
historyApiFallback: true,
hot: true,
proxy: {
'/api': {
target: 'http://localhost:5001',
secure: false,
},
},
allowedHosts: [
'localhost',
'fatpandadev'
],
public: 'fatpandadev:8080'
},
});
module.exports = config;
Run Code Online (Sandbox Code Playgroud)
webpack.common.js
const path = require('path');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const DIST_DIR = path.resolve(__dirname, "dist");
const SRC_DIR = path.resolve(__dirname, "src");
const config = {
entry: [
"babel-polyfill",
`${SRC_DIR}/app/index.js`,
`${SRC_DIR}/app/assets/stylesheets/application.scss`,
`${SRC_DIR}/app/components/index.scss`,
"font-awesome/scss/font-awesome.scss",
"react-datepicker/dist/react-datepicker.css",
"rc-time-picker/assets/index.css",
"react-circular-progressbar/dist/styles.css",
"@trendmicro/react-toggle-switch/dist/react-toggle-switch.css",
],
output: {
path: `${DIST_DIR}/app/`,
filename: "bundle.js",
publicPath: "/app/"
},
module: {
rules: [
{
enforce: "pre",
test: /\.js$/,
exclude: /node_modules/,
loader: "eslint-loader",
options: {
failOnWarning: false,
failOnError: true
}
},
{
test: /\.js$/,
include: SRC_DIR,
loader: 'babel-loader',
query: {
presets: ['react', 'stage-2']
}
},
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader'
]
},
{
test: /\.scss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'sass-loader'
]
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
loaders: ['file-loader?context=src/images&name=images/[path][name].[ext]', {
loader: 'image-webpack-loader',
query: {
mozjpeg: {
progressive: true,
},
gifsicle: {
interlaced: false,
},
optipng: {
optimizationLevel: 7,
},
pngquant: {
quality: '75-90',
speed: 3,
},
},
}],
exclude: path.resolve(__dirname, "node_modules"),
include: __dirname,
},
{
test: /\.woff2?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
// loader: "url?limit=10000"
use: "url-loader"
},
{
test: /\.(ttf|eot|svg)(\?[\s\S]+)?$/,
use: 'file-loader'
},
{
test: /\.(txt|csv)$/,
use: [
{
loader: 'file-loader',
options: {}
}
]
},
]
},
plugins: [
new MiniCssExtractPlugin({
filename: "application.css"
})
]
};
module.exports = config;
Run Code Online (Sandbox Code Playgroud)
(此答案仅在服务器端引用)
除了@PlayMa256,在服务器端(Nodejs 运行时),你可能还需要 emitFile: true
{
test: /\.(txt|csv|mmdb)$/,
use: [
{
loader: 'file-loader',
options: {
name: "[path][name].[ext]",
emitFile: true,
},
},
],
},
Run Code Online (Sandbox Code Playgroud)
参考这个 PR:https : //github.com/webpack-contrib/file-loader/pull/135
在我看来,file-loader方式似乎比copy-webpack-plugin方式更好。
你可以像下面这样测试:
import csvPath from './assets/data.csv'
console.log(csvPath) // assets/data.csv
Run Code Online (Sandbox Code Playgroud)
测试版本:
$ cat node_modules/webpack/package.json | jq .version
"4.29.5"
$ cat node_modules/file-loader/package.json | jq .version
"3.0.1"
Run Code Online (Sandbox Code Playgroud)
如果您不需要处理/解析文件,而只需将它们复制到文件夹中,您可能需要检查CopyWebpackPlugindist。
复制 Webpack 插件
将单个文件或整个目录复制到构建目录
安装
Run Code Online (Sandbox Code Playgroud)npm i -D copy-webpack-plugin用法
webpack.config.jsRun Code Online (Sandbox Code Playgroud)const CopyWebpackPlugin = require('copy-webpack-plugin') const config = { plugins: [ new CopyWebpackPlugin([ ...patterns ], options) ] }图案
一个简单的图案看起来像这样
Run Code Online (Sandbox Code Playgroud){ from: 'source', to: 'dest' }
| 归档时间: |
|
| 查看次数: |
4651 次 |
| 最近记录: |