我正在尝试在webpack编译时动态包含一个.js文件。
我不想使用上下文来加载环境变量,因为我不会在代码中使用这些神奇的变量。
我想要做的是使用val加载程序来执行一个模块。这里使用一个环境变量来决定要导入的模块。并导出该模块。
但是,这会导致其他加载器抛出错误。
下面是我的dir布局
--base
--src
app.js
test.js
webpack.config.js
rawr.js下面是我的webpack.config.js文件
var path = require('path');
var webpack = require('webpack');
// var process = require('process');
var env = require(process.env.NODE_ENV || './devConf.js');
module.exports = {
// Specify logical root of the sourcecode
plugins: [
new webpack.DefinePlugin(env)
],
context: path.join(__dirname, '/src'),
entry: {
app: ['bootstrap.js'],
},
// Specify where to put the results
output: {
path: path.join(__dirname, '/dist'),
filename: 'build.js'
},
// Specify logical root of package imports so as to avoid relative path everywhere
resolve: {
root: path.join(__dirname, '/src'),
// What files we want to be able to import
extensions: ['', '.js', '.css', '.less'],
},
module: {
preLoaders: [
// Lint all js before compiling
/*{
test: /\.js$/,
exclude: /node_modules/,
loader: 'eslint-loader'
}*/
],
loaders: [
{
test: /\.js$/,
query: {
presets: ['es2015']
},
exclude: /node_modules/,
loader: 'babel'
},
{
test: /\.tpl\.html$/,
exclude: /node_modules/,
loader: 'ngtemplate?relativeTo=/src/!html'
},
{
test: /\.scss$/,
loaders: ["style", "css", "sass"]
},
{
test: /\.css$/,
loaders: ["style", "css"]
}
]
},
// Dev server settings
devServer: {
contentBase: path.join(__dirname, '/dist'),
noInfo: false,
hot: true
},
// ESLint config
eslint: {
configFile: path.join(__dirname, '.eslintrc')
}
};我的js文件如下所示
// app.js
let b = require('val!test.js');
// test.js
var process = require('process');
loadedModule = require(process.env.NODE_ENV) // NODE_ENV='./rawr.js'
export const myString = loadedModule
// rawr.js
module.exports.test = "hello world";我得到的异常是:
ERROR in ./src/app/app.js
Module parse failed: /home/smaug/Projects/angular-template/node_modules/babel-loader/index.js?{"presets":["es2015"]}!/home/smaug/Projects/angular-template/src/app/app.js Line 1: Unexpected identifier
You may need an appropriate loader to handle this file type.
| 'use strict';
|
| require('angular-animate');
@ ./src/bootstrap.js 7:0-18这和我想做的事无关。但是如果我删除了请求(‘val!...’)声明,它就消失了。
有什么想法吗?
更新:
如果将require语句改为
let b = require('val!./test.js');我得到以下错误:
ERROR in ./~/val-loader!./src/app/test.js
Module build failed: Error: Final loader didn't return a Buffer or String
at DependenciesBlock.onModuleBuild (/home/smaug/Projects/angular-template/node_modules/webpack-core/lib/NormalModuleMixin.js:299:42)
at nextLoader (/home/smaug/Projects/angular-template/node_modules/webpack-core/lib/NormalModuleMixin.js:275:25)
at /home/smaug/Projects/angular-template/node_modules/webpack-core/lib/NormalModuleMixin.js:292:15
at runSyncOrAsync (/home/smaug/Projects/angular-template/node_modules/webpack-core/lib/NormalModuleMixin.js:160:12)
at nextLoader (/home/smaug/Projects/angular-template/node_modules/webpack-core/lib/NormalModuleMixin.js:290:3)
at /home/smaug/Projects/angular-template/node_modules/webpack-core/lib/NormalModuleMixin.js:292:15
at Object.context.callback (/home/smaug/Projects/angular-template/node_modules/webpack-core/lib/NormalModuleMixin.js:148:14)
at Object.module.exports (/home/发布于 2016-02-12 06:09:51
// app.js
let b = require('val!./test.js');发布于 2016-12-05 16:46:22
这是一个非常令人困惑的错误消息。
检查以下故障..
css-loader node-sass解析-url-loader sass-loader\ style-loader url
4. 4.import语句为空
例如:
import * from '';不返回任何内容的
发布于 2017-01-07 01:39:49
test.js应该返回一个字符串,其中包含应该提供给需要它的模块的代码。因此,对于您的示例,test.js应该从以下内容开始
var process = require('process');
loadedModule = require(process.env.NODE_ENV) // NODE_ENV='./rawr.js'
export const myString = loadedModule到这个
var process = require('process')
loadedModule = require('raw-loader!' + process.env.NODE_ENV)
export const myString = loadedModule使用"raw-loader“,您将从rawr.js获得文本代码,而不是rawr.js导出的值。然后,"val-loader“将把rawr.js的代码提供给app.js中的require,它将加载该文本,就像它是您试图加载的文件的文本一样。
这可能是一个糟糕的解释,但请记住,当您使用val-loader时,您需要返回一个包含代码的字符串。
https://stackoverflow.com/questions/35350059
复制相似问题