【问题标题】:Can't load templates with routeprovider when using webpack使用 webpack 时无法使用 routeprovider 加载模板
【发布时间】:2017-11-02 17:01:15
【问题描述】:

我最近从 grunt 迁移到 webpack,但我不知道如何要求/导入我的模板。我看过几个类似的issues,但都没有运气。

这是我的webpack.config 文件:

  var webpack = require('webpack');
    var globby = require('globby');
    var path = require('path');

    var HtmlWebpackPlugin = require('html-webpack-plugin');
    var ExtractTextPlugin = require('extract-text-webpack-plugin');
    var CleanWebpackPlugin = require('clean-webpack-plugin');
    var AssetsPlugin = require('assets-webpack-plugin');


    var ExtractTextPlugin = require('extract-text-webpack-plugin');
    module.exports = {
        entry: {
            app: globby.sync(['./app/app.js','./app/app.run.js', './app/app.config.js', './app/**/*.js']),
            styles: globby.sync(['./content/styles/*.css']),
            images: globby.sync(['./content/images/*.*']),
            vendor: [
           // removed to save space
            ]
        },
        output: {
            filename: './scripts/[name].bundle.js',
            path: path.join(__dirname, "public")
        },
        devServer: {
            port: 1384,
            contentBase: './public/'
        },

        // Enable sourcemaps for debugging webpack's output.
        devtool: 'source-map',

        module: {
            rules: [
                {   test: /\.less$/, 
                    loader: "less-loader",
                    include: path.resolve(__dirname, "content", "styles", "less")
                },
                {
                    test: /\.html$/,
                    use: [
                        {
                            loader: 'ngtemplate-loader',
                            options: {
                                angular: true,
                            },
                        },
                        {
                            loader: 'raw-loader',
                        },
                        {
                            loader: 'html-loader'
                        },
                        {
                            loader: "ngtemplate!html?module=myTemplates&relativeTo=" + 
                            (path.resolve(__dirname, './app/**'))
                        },
                    ],
                    /*
                    exclude: [/node_modules/]
                    */
                },
                {
                    test: /\.css$/,
                    loader: ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader' }),
                },
                {
                    test: /\.(ico)$/,
                    loader: "url-loader?name=./[name].[ext]",
                    include: path.resolve(__dirname, "content", "images")
                },
                {
                    test: /\.(jpg|jpeg|gif|png|tiff|svg)$/,
                    loader: "file-loader?name=./images/[name].[ext]",
                    include: path.resolve(__dirname, "content", "images")
                },
                {
                    test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                    loader: 'url-loader?minetype=application/font-woff&name=./fonts/[name].[ext]'
                },
                {
                    test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                    loader: 'file-loader?name=./fonts/[name].[ext]'
                },
                {
                    test: require.resolve('adal-angular/lib/adal'),
                    loader: 'expose-loader?AuthenticationContext'
                },
                {
                    test: /\.js$/,
                    enforce: "pre",
                    loader: 'source-map-loader'
                }
            ],
        },

        plugins: [
            new webpack.DefinePlugin({
                ADMIN_API_URL: JSON.stringify('http://localhost:41118/api/'),
                API_URL: JSON.stringify('http://localhost:32605/api/'),
                GLOBAL_ADMIN_URL: JSON.stringify('https://adminapi.tradesolution.no/')
            }),
            new HtmlWebpackPlugin({
                template: './app/layout.ejs',
                filename: 'index.html'
            }),
            new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', filename: './scripts/vendor.bundle.js' }),
            new ExtractTextPlugin({ filename: './styles/[name].bundle.css' }),
            /*new CleanWebpackPlugin(['public'], {
                verbose: false
            }),
            */
            new AssetsPlugin({
                filename: 'webpack.assets.json',
                path: './public/scripts',
                prettyPrint: true
            }),
            new webpack.ProvidePlugin({
                $: 'jquery',
                jQuery: 'jquery',
                'window.jQuery': 'jquery',
                'window.$': 'jquery',
                "window.AuthenticationContext": "AuthenticationContext",
                _: 'underscore'
            }),
        ],
        externals: [
            { xmlhttprequest: '{XMLHttpRequest:XMLHttpRequest}' }
        ],


    }

公用文件夹按照应有的方式构建,包含 .js、样式、图像等。但简单的导航会导致此错误:

ERROR in ./app/app.config.js
Module not found: Error: Can't resolve 'app/varegruppe/templates/index.html' in 'C:\Users\oystein\work\EPD.SPA\EpdSPA\app'
 @ ./app/app.config.js 50:25-71

以下是如何定义路由的示例:

  $routeProvider.when('/produkteier', {
            templateUrl: require('app/produkteier/templates/view.html')
        })

【问题讨论】:

  • $routeProvider 中尝试将 templateUrl 更改为 template
  • 我也试过了,同样的错误
  • 也许向我们展示app.config.js 以查看第 50 行会有所帮助
  • 第 50 行只是另一条路径,类似于上面提供的路径。
  • 你可能需要在你的 webpack.config.js 中创建一个resolve 属性。基本上让它知道您的应用程序文件相对于项目根目录的位置。

标签: javascript angularjs webpack


【解决方案1】:

使用这个plugin我设法将所有的html文件复制到公共目录中,配置如下:

var CopyWebpackPlugin = require('copy-webpack-plugin');
new CopyWebpackPlugin([
            {from: './app/**/*.html', to: './'}
        ])

【讨论】:

    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 2018-09-24
    • 2019-11-05
    • 2023-01-29
    • 2020-03-11
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多