【发布时间】:2019-01-23 23:19:18
【问题描述】:
总的来说,我对 webpack 还是很陌生。真的才几天。在大多数情况下,我觉得我在设置 webpack 并将其集成到本地开发环境方面取得了相当不错的进展。在此过程中存在相当多的错误和命令行错误,但到目前为止我能够解决其中的大部分问题。向 Maxmillian Schwärzmuller 在 Webpack 上的简短 YT 系列大喊,让我开始。
现在我正在尝试重新定位/扩展我已经掌握的一些概念,但是我还没有成功让我的npm run build(这将是生产命令)来编译我的 CSS文件分别放入 CSS 和 JS 子文件夹(位于站点根目录之外)。
我觉得我在尝试在我的 JS 和 CSS 特定测试块中使用 file-loader 包方面取得了更大的进步,但现在我想知道我是不是误解了 file-loader 包的目的或者只是没有正确配置它。
这是我的webpack.config.js 文件的内容:
const path = require('path');
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const extractPlugin = new ExtractTextPlugin({
filename: 'styles.css'
});
module.exports = {
entry: './src/js/app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'app.bundle.js'
},
module: {
rules: [
{
test: /\.js$/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['babel-preset-env']
}
}
// attempted to replicate the same use statement as seen below for the jpg/png test
// and only app.js (not app.bundle.js) was dropped into dist/js/
// {
// loader: 'file-loader',
// options: {
// name: '[name].[ext]',
// outputPath: 'js/',
// publicPath: 'js/'
// }
// }
]
},
{
test: /\.scss$/,
use: extractPlugin.extract({
use: ['css-loader', 'sass-loader']
})
// attempted to modify/replicate the above use statement
// use: [
// {
// loader: 'css-loader',
// loader: 'sass-loader'
// loader: 'file-loader',
// options: {
// name: '[name].[ext]',
// outputPath: 'css/',
// publicPath: 'css/'
// }
// }
// ]
},
{
test: /\.html$/,
use: [
{
loader: 'html-loader'
}
]
},
{
test: /\.(jpg|png)$/,
use: [
{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'images/',
publicPath: 'images/'
}
}
]
},
{
test: /\.html$/,
use: [
{
loader: 'file-loader',
options: {
name: '[name].[ext]'
}
}
],
exclude: path.resolve(__dirname, 'src/index.html')
}
]
},
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
}),
extractPlugin,
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'src/index.html'
}),
new CleanWebpackPlugin(['dist'])
]
};
这是package.json 文件:
{
"name": "nodomaintoseehere.com",
"version": "1.0.0",
"description": "Site repository v1.0",
"private": true,
"main": "./src/app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack-dev-server",
"build": "webpack -p"
},
"author": "Jeremy Wilson",
"license": "ISC",
"devDependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"babel-polyfill": "^6.26.0",
"babel-preset-env": "^1.7.0",
"babel-preset-es2015": "^6.24.1",
"clean-webpack-plugin": "^0.1.19",
"cross-env": "^5.2.0",
"css-loader": "^1.0.0",
"extract-text-webpack-plugin": "^3.0.2",
"file-loader": "^1.1.11",
"html-loader": "^0.5.5",
"html-webpack-plugin": "^3.2.0",
"jquery": "^3.3.1",
"node-sass": "^4.9.3",
"sass-loader": "^7.1.0",
"webpack": "^3.12.0",
"webpack-cli": "^3.1.0",
"webpack-dev-server": "^2.11.2"
},
"dependencies": {
"bootstrap": "^4.1.3",
"lodash": "^4.17.10"
}
}
最后是app.js 文件
import '../css/styles.scss';
import 'babel-polyfill';
import $ from 'jquery';
提前致谢。
【问题讨论】:
-
解释为什么默认行为不适合您的问题或您要完成的工作
-
默认行为是将 app.bundle.js 和 styles.css 文件转储到根 (dist) 文件夹中。我不想要那个。我希望它们分别转移到自己的 /js 和 /css 子目录中。 webpack.config.js 中注释掉的代码未能成功达到预期的效果。
标签: npm webpack css-loader sass-loader webpack.config.js