首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Webpack -正在尝试将我的CSS和JS文件路由/编译到dist/文件夹中的CSS和JS特定子文件夹中

Webpack -正在尝试将我的CSS和JS文件路由/编译到dist/文件夹中的CSS和JS特定子文件夹中
EN

Stack Overflow用户
提问于 2018-08-17 07:18:34
回答 1查看 1.3K关注 0票数 1

总的来说,我对webpack来说是个新手。真的只有几天。在很大程度上,我感觉我在设置和集成webpack到我的本地开发环境方面取得了一些相当不错的进展。在此过程中,有不少bug和命令行错误,但到目前为止,我能够解决其中的大多数问题。大声喊出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';

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-08-17 08:28:48

将资产放在不同的子文件夹中不会造成任何性能上的差异,也不会造成使用上的差异,因为这些子文件夹每次都会驻留在静态服务器上,直到重新部署为止。

没有办法将js文件输出到js文件夹,因为babel加载器上没有选项,文件加载器不处理js,它们只是发出文件,在你的情况下,它将在结束时与复制的文件一起结束。文件加载器不适合处理javascript文件。

对于css,可以配置extract-text-plugin。

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: 'css/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']
            }
          }
        ]
      },
      {
        test: /\.scss$/,
        use: extractPlugin.extract({
          use: ['css-loader', 'sass-loader']
        })
      },
      {
        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'])
  ]
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51886500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档